2014-07-24 3 views
0

PHPUnit 테스트 스위트를 작성 중이며 조금 문제가 있습니다.PHPUnit 테스트가 실패 할 때 통과합니다.

public function testSomething(){ 
    $stub = $this->getMockForAbstractClass('\core\classes\ImportedFile'); 

    $stub->expects($this->exactly(4)) 
     ->method('thismethoddoesntexist'); 

    $this->markTestIncomplete('not finished implementing'); 
} 

이 테스트가 실패하지 않는 몇 가지 이유 : 여기

는 테스트입니다. 이 방법은 존재하지 않으므로 한 번이라도 호출되지 않으므로 4 번만 호출하면 안됩니다. 존재하는 메소드 이름을 넣었을 때도 내가 뭘 넣든 상관 없습니다. 그리고 분명히 잘못되었을 때 여전히 100,000 번 실행하는 것을 기대하고 있다고 말합니다.

제대로 작동하는 이전 테스트에서 비슷한 검사를했기 때문에 매우 이상합니다.

누구도 이와 같은 문제가 발생 했습니까?

+1

실제로 어떤 방법이나 주장을하는 것은 아니지만 ... 기대를 설정하고 있지만 테스트에서 아무 것도하지 않습니다. – Kryten

+0

예, 테스트가 진행되는 중에 만 남았습니다. 분명히 메소드 호출 등을 추가 할 것입니다. 나는 여전히 메소드가 호출 될 것으로 기대하고 있기 때문에 테스트 실패라고 생각한다. – user1578653

+0

'markTestIncomplete'는 테스트가 실패하지 않도록 설계되었습니다. 테스트를 통과하지는 않았지만 모든 테스트가 통과되었다고 말할 것입니다. http://phpunit.de/manual/current/en/phpunit-book.html#incomplete-and-skipped-tests.incomplete-tests.examples.SampleTest.php – Schleis

답변

0

문제의 원인을 찾으 셨습니다. 그것은 $this->markTestIncomplete()에 대한 호출로 인해 발생한 것 같습니다. 어떤 이유로이 테스트를 통해 적어도이 경우 반드시 실패하지 않도록합니다.

markTestIncomplete에 대한 호출을 제거하면 정상적으로 작동하고 실패 할 때 실패합니다. 필자는 markTestIncomplete 메서드를 100 % 완료 될 때까지 테스트에 남겨 두는 경향이 있으며 예상치를 충족시키지 않으면 불완전한 상태에서도 테스트를 실행한다고 가정합니다. 이것은 공정한 가정이 아닌가요? PHPUnit의 버그입니까?

+0

필자는 테스트를 위해 [Mockery] (https://github.com/padraic/mockery)를 사용하기 때문에 내 경험이 약간 다르지만 테스트 실행 후 Mockery는'Mockery :: close()'를 호출해야한다. 메소드 호출 기대를 적절하게 해결합니다. 아마도 비슷한 것이 필요합니까? – Kryten

+0

귀하의 의견에 감사드립니다 - 나는 PHPUnit에서 그런 것을 알지 못합니다. 나는 약간의 인터넷 검색을 할 것이다. – user1578653

2

markTestIncomplete 예외를 throw하고 마녀가 테스트를 끝내십시오. mock의 'expects'에 대한 검사는 건너 뜁니다.

관련 문제