2017-02-14 1 views
0

PHPUNIT의 전문가가 아니기 때문에 도움이 필요합니다.PHPUNIT - 두 번 인스턴스화하는 클래스의 동일한 인스턴스를 반환합니다.

나는 내 테스트 클래스에 두 번 내 검사기를 인스턴스화 할 때, 그 phpunit을가 두번째 인스턴스를 무시한다고 생각 ... 여기

내 코드입니다 : ```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())); 
    } 

} 

`` ` 그래서 내 test "testIsValid()"가 제대로 작동하지 않습니다. 반면, "testIsNotValid()"테스트를 삭제하면 "testIsValid()"테스트가 작동하기 시작합니다 ...

누구나 아이디어가 있습니까?

대단히 감사합니다. 여기

+0

, 더 많은 정보를 제공하시기 바랍니다 감사합니다. 당신은 어떤 결과물을 얻고 있으며 무엇을 기대합니까? 'rules()'와'isValid()'메소드의 코드를 보여줄 수 있습니까? – Timurib

+0

두 번째 대답에 방법을 게시했습니다. 내가 얻는 것, 그리고 내가 기대하는 것은 나의 1 차 답의 설명에 설명되어있다. 고맙습니다 – stephweb

답변

0

감사합니다, 내 Validator 클래스 :

<?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; 
    } 
} 

관련 문제