gpt4 book ai didi

PHPUnit 提供程序不使用依赖项

转载 作者:可可西里 更新时间:2023-10-31 22:59:34 27 4
gpt4 key购买 nike

我正在使用 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...
);
}
}

上面的代码只是一个示例,但展示了我的代码结构。运行时,它会跳过消费者测试,就好像生产者失败了一样。我期望对于提供者中的每组测试数据,生产者将使用该数据运行,并且其所有消费者都相应地运行。

最佳答案

因为这个问题已经有 2 天了,我试一试:

它似乎没有按您希望的方式工作。

@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) { ... }

希望能帮助或至少激励其他人回答 ;)

关于PHPUnit 提供程序不使用依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com