在7月份,我看到一篇题为“JExample:利用测试用例间的依赖性来辅助错误的定位”。
"一个设计合理的测试套件应该通过高覆盖率来帮助我们发现错误。当测试用例失败的时候,我们希望可以快速地定位错误,通过查看相关的失败用例,找到错误的根源。然而,底层代码变动时引入的细微错误,可能会导致多米诺牌效应,使很多单测用例失败。 这是一个问题,因为修改者追查错误根源时,除了查看分析这些用例外,别无它策。特别是当修改者对测试失败的这部分代码不熟悉的时候,这个任务将变得异常艰巨"
在即将发布的 PHPUnit 3.4 中,我实现了上面论文中提出的一个想法。
让我们来看下面这段代码:
-
<?php
class DependencyFailureTest extends PHPUnit_Framework_TestCase
{
public function testOne()
{
$this->fail();
}
public function testTwo()
{
}
}
?>
当我们运行这个测试时,第二个用例会由于所依赖的用例失败而被跳过:
-
sb@ubuntu ~ % phpunit --verbose DependencyFailureTest
PHPUnit 3.4.0-dev by Sebastian Bergmann.
DependencyFailureTest
FS
Time: 0 seconds
There was 1 failure:
1) testOne(DependencyFailureTest)
Failed asserting that <boolean:false> is true.
/home/sb/DependencyFailureTest.php:6
There was 1 skipped test:
1) testTwo(DependencyFailureTest)
This test depends on "DependencyFailureTest::testOne" to pass.
FAILURES!
Tests: 2, Assertions: 0, Failures: 1, Skipped: 1.
这个新特性的一些细节:
- 一个测试可以有多个
@depends 注释。
@depends method 引用当前类中的method()方法。
@depends class::method 引用class::method()方法。
- PHPUnit 不会改变测试用例的运行顺序,需要自己保证当前测试所依赖的测试已经在此之前运行过。
请测试这个新特性并反馈它的实用性和可用性。