我正在使用 PHPUnit 3.4.9,但我在@depends注释方面遇到了一些问题。它的工作原理与示例中类似,但当生产者依赖提供者时就会中断。我不知道这是否意味着有效,但我的代码基本上采用以下形式:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testEmpty ($data)
{
$stack = array();
$this->assertTrue(empty($stack));
return $stack;
}
/**
* @depends testEmpty
*/
public function testPush (array $stack)
{
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertFalse(empty($stack));
return $stack;
}
/**
* @depends testPush
*/
public function testPop (array $stack)
{
$this->assertEquals('foo', array_pop($stack));
$this->assertTrue(empty($stack));
}
public function provider ()
{
return array(
// Some testing data here...
);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只是一个示例,但显示了我的代码的结构。运行时,它会跳过消费者测试,就像生产者失败一样。我期望对于提供者中的每组测试数据,生产者将使用该数据运行,并且其所有消费者也相应地运行。
由于问题已经出现两天了,我试一下:
它似乎没有按照你想要的方式工作。
@depends只是查看具有所提供名称的测试是否已运行并获取结果。它甚至不知道也不关心所述测试的@annotations。
我猜想(没有深入研究 phpunit 源代码以确保 100% 确定)测试@depends是在内部作为“测试组”运行的,而不是作为单个测试运行,因此没有名为“testEmpty”的测试,并且取决于失败。
因此,为了提供解决方法,我现在唯一能想到的就是直接调用这些“子测试”。
<?php
class StackTest extends PHPUnit_Framework_TestCase {
/**
* @dataProvider provider
*/
public function testEmpty($data) {
$stack = array();
$this->assertTrue(empty($stack));
$this->nextTestOrJustAllInOneTestcaseSaidly($stack);
return $stack;
}
protected function nextTestOrJustAllInOneTestcaseSaidly($data) { ... }
Run Code Online (Sandbox Code Playgroud)
希望能帮助或至少激励其他人回答;)
| 归档时间: |
|
| 查看次数: |
3328 次 |
| 最近记录: |