我有一个看起来像这样的PHPUnit测试:
/**
* @dataProvider provideSomeStuff
*/
public function testSomething($a, $b, $c)
{
...
}
/**
* @dataProvider provideSomeStuff
* @depends testSomething
*/
public function testSomethingElse($a, $b, $c)
{
...
}
/**
* @depends testSomething
*/
public function testMoreStuff()
{
...
}
// Several more tests with the exact same setup as testMoreStuff
即使testSomething
成功,也会跳过依赖它的所有测试。 PHPUnit manual中的一些注释表明测试可能依赖于使用数据提供者的其他测试:
注意
当测试从@dataProvider方法和@depends on的一个或多个测试接收输入时,来自数据提供者的参数将来自依赖测试的参数。注意
当测试依赖于使用数据提供程序的测试时,依赖测试将在其依赖的测试对至少一个数据集成功时执行。使用数据提供程序的测试结果无法注入依赖测试。
所以我没有CLUE为什么它只是跳过我的所有测试。我几个小时都在苦苦挣扎,有人帮帮我。 Here's the complete test code如果无法从上面的伪代码中导出问题
测试结果的屏幕截图:
答案 0 :(得分:2)
这似乎是phpunit 3.4.5中的一个错误,但已在phpunit 3.4.12中修复。
以下是一个基于手册中的最小示例。我在 PHPUnit 3.4.5 中获得了与您相同的行为,但我在 PHPUnit 3.6.11 中获得了4次传递。 将其缩小,phpunit 3.4 changelog表示它已在PHPUnit 3.4.12中修复。
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
/**
* @depends testAdd
*/
public function testAddAgain()
{
$this->assertEquals(5,3+2);
}
/** */
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
);
}
}
答案 1 :(得分:-1)
您必须在主方法之后定义依赖方法。
public function testSomething()
{
$foo = [];
//test something
return $foo;
}
/**
* @depends testSomething
*/
public function testBar(array $foo)
{
//more tests
}