PHPUnit测试在应该失败的时候通过了


PHPUnit test passes when it should fail

我正在编写一个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次,当这显然是错误的时候,它仍然通过。

我觉得这很奇怪,因为我在以前的测试中有过类似的检查,但都正常工作。

有人遇到过这样的问题吗?

markTestIncomplete抛出特殊异常,即结束测试。在mock中检查' expectations '会被跳过。

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

找到问题的原因。似乎是呼叫$this->markTestIncomplete()引起的。由于某种原因,在测试中包含这个会导致它不会失败,至少在这个例子中,即使它应该失败。

删除对markTestIncomplete的调用使其正常运行并在应该的时候失败。我倾向于在测试中保留markTestIncomplete方法,直到它100%完成,并假设如果我运行测试,即使在其不完整的状态下,如果不满足期望,它应该失败。这样的假设不公平吗?这是PHPUnit的bug吗?