为什么phpunit跳过我的大部分测试,即使他们的依赖成功了?

时间:2012-06-15 12:52:46

标签: php phpunit

我有一个看起来像这样的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如果无法从上面的伪代码中导出问题

测试结果的屏幕截图:

Test results

2 个答案:

答案 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 
}