2017-02-14 10 views
0

私はPHPUNITの専門家ではないので、助けてください。PHPUNIT - 同じインスタンスを2回インスタンス化するクラスを返す

私は私のテストクラスで二回私のバリデータのインスタンスを作成するとき、そのPHPUnitのは2番目のインスタンスを無視し...ここで

が私のコードであることを感じる: `` `PHP

<?php 

namespace Tests\Validation; 

use PHPUnit\Framework\TestCase; 
use Validation\Validator; 

class ValidatorTest extends TestCase 
{ 
    public function testIsNotValid() 
    { 
     $_POST['input_test'] = '1'; 

     $validator = new Validator(); 

     $validator->rules([ 
      'input_test' => [ 
       'alpha '=> true, // "$_POST['input_test']" must be alpha 
      ], 
     ]); 

     // "isValid()" must return "false", and PHPUNIT returns "false" 
     $this->assertFalse($validator->isValid()); 

     // "count($validator->getErrors())" Must return "1", and PHPUNIT returns "1" 
     $this->assertEquals(1, count($validator->getErrors())); 
    } 

    public function testIsValid() 
    { 
     $_POST['input_test'] = 'aaa'; 

     $validator = new Validator(); 

     $validator->rules([ 
      'input_test' => [ 
       'alpha' => true, // "$_POST['input_test']" must be alpha 
      ], 
     ]); 

     // "isValid()" must return "true", but PHPUNIT returns "false" 
     $this->assertTrue($validator->isValid()); 

     // "count($validator->getErrors())" must return "0", but PHPUNIT returns "1" 
     $this->assertEquals(0, count($validator->getErrors())); 
    } 

} 

` ` ` 私のテスト" testIsValid() "は正しく動作しません。一方、テスト "testIsNotValid()"を削除すると、テスト "testIsValid()"が機能し始めます...

誰でも知っていますか?

ありがとうございました。ここ

+0

、より多くの情報を提供してください、ありがとうございました。あなたはどんなアウトプットを得ていますか? 'rules()'と 'isValid()'メソッドのコードを表示できますか? – Timurib

+0

私は2番目の答えにメソッドを掲載しました。私が得るものと私が期待することは、私の第1の答えのコメントで説明されています。ありがとうございました – stephweb

答えて

0

ありがとう、私のバリデータクラス:

<?php 

class Validator implements ValidatorInterface 
{ 
    /** 
    * Name du input 
    * 
    * @var string 
    */ 
    private $input; 

    /** 
    * Valeur des rules qu'on passe à un input 
    * 
    * @var mixed 
    */ 
    private $value; 

    /** 
    * POST ou GET - Sera à POST par defaut 
    * 
    * @var mixed 
    */ 
    private $requestMethod; 

    /** 
    * Contiendra les éventuels erreurs 
    * 
    * @var array 
    */ 
    private $errors = []; 

    /** 
    * Validator constructor. 
    * 
    * @param null $requestMethod 
    */ 
    public function __construct() 
    {   
     $this->requestMethod = $_POST; 
    } 

    /** 
    * Vérification des données soumises 
    * 
    * @param array $array 
    */ 
    public function rules(array $array) 
    { 
     foreach ($array as $input => $rules) { 
      $this->input = $input; 

      if (is_array($rules)) {     
       foreach ($rules as $rule => $value) { 
        if ($rule != 'label') { 
         if ($rule == 'required' || $rule == 'file' || isset($this->requestMethod[$this->input])) { 
          $this->value = $value; 

          $this->callRule($rule); 
         } 
        } 
       } 
      } 
     } 
    } 

    /** 
    * Appeler la règle de validation 
    * 
    * @param string $rule 
    */ 
    protected function callRule(string $rule) 
    { 
     $methodVerify = 'verify'.Str::convertSnakeCaseToCamelCase($rule); 

     if (method_exists($this, $methodVerify)) { 
      $this->$methodVerify(); 
     } 
    } 

    /** 
    * Vérifier que valeur entrée dans le champ est bien alphabétique 
    */ 
    private function verifyAlpha() 
    { 
     if ($this->value === true && !preg_match(self::REGEX_ALPHA, $this->requestMethod[$this->input])) { 
      $this->errors[$this->input] = $this->pushError('alpha'); 
     } 
    } 

    /** 
    * @return bool - True si formulaire soumis est valide, false si pas valide 
    */ 
    public function isValid(): bool 
    { 
     return count($this->errors) === 0; 
    } 
} 

関連する問題