2014-07-24 144 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'); 
} 

出于某种原因,这个测试是不是失败。它应该是因为该方法不存在,因此不会被调用一次,更不用说四次了。不管我在那里放什么东西,即使我输入了一个确实存在的方法名称,并且说我预计它会运行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方法留在测试中,直到完成为止,并且假设如果我运行测试,即使处于未完成状态,如果未达到期望,它也会失败。这是不是一个公平的假设?这是PHPUnit中的错误吗?

+0

我使用[Mockery](https://github.com/padraic/mockery)进行测试,所以我的经验有点不同,但Mockery需要在测试运行后调用'Mockery :: close()'正确解决方法调用期望。也许需要类似的东西? – Kryten

+0

感谢您的评论 - 我不知道PHPUnit中的任何内容。我会做一些Google搜索。 – user1578653

2

markTest不完整抛出特殊异常,女巫结束测试。检查模拟中的“预计”会被跳过。

public static function markTestIncomplete($message = '') 
    { 
     throw new PHPUnit_Framework_IncompleteTestError($message); 
    } 
相关问题