PHPUnit测试在失败时通过

时间:2014-07-24 13:59:44

标签: php unit-testing 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次,但是当这显然是错误的时候它仍然会通过。

我发现这很奇怪,因为我在以前的测试中有类似的检查,它们正常工作。

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

2 个答案:

答案 0 :(得分:2)

markTestIncomplete抛出特殊异常,女巫结束测试。将跳过对模拟中“预期”的检查。

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

答案 1 :(得分:0)

找到问题的原因。这似乎是由对$this->markTestIncomplete()的调用引起的。出于某些原因,在测试中使用它会导致它不会失败,至少在这种情况下,即使它应该。

删除对markTestIncomplete的调用会使其正常运行并在应有时失败。我倾向于将markTestIncomplete方法保留在测试中,直到它完成100%,并假设如果我运行测试,即使处于不完整状态,如果不满足预期,它也会失败。这不是一个公平的假设吗?这是PHPUnit中的错误吗?