【发布时间】:2014-07-24 22:28:04
【问题描述】:
我正在编写一个 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旨在防止您的测试失败。它没有通过,但您的测试套件会说所有测试都通过了。 phpunit.de/manual/current/en/… -
@Schleis 我认为有一些不一致之处 - 如果我创建一个仅包含
$this->assertTrue(false)的测试,然后调用markTestIncomplete,PHPUnit 正确地无法通过测试。那么为什么在我上面的例子中不这样做呢? -
因为失败的断言被一个异常标记,该异常阻止了对
markTestIncomplete的调用。在您的情况下,模拟检查是在测试完成后进行的。所以markTestIncomplete被调用并且测试被标记为未完成。
标签: php unit-testing phpunit