是否可以使用@depends返回多个值?

时间:2013-04-22 11:05:25

标签: phpunit

@depends注释允许表达测试之间的依赖关系:

class MyTest extends \PHPUnit_Framework_TestCase
{
    public function testOne()
    {
        // ...

        return $client;
    }

    /**
     * @depends testOne
     */
    public function testTwo(Client $client)
    {
        // ...
    }
}

如果我想返回多个值,我可以返回一个值数组,例如:

class MyTest extends \PHPUnit_Framework_TestCase
{
    public function testOne()
    {
        // ...

        return array($client, $node);
    }

    /**
     * @depends testOne
     */
    public function testTwo(array $items)
    {
        list ($client, $node) = $items;

        // ...
    }
}

虽然它工作正常,但这种方法的问题在于我丢失了IDE的类型提示,并且必须手动注释$client$node变量,以便它能够正确理解它们。

我想要做的是在第二次测试中明确使用返回值作为单独的参数:

class MyTest extends \PHPUnit_Framework_TestCase
{
    public function testOne()
    {
        // ...

        return array($client, $node);
    }

    /**
     * @depends testOne
     */
    public function testTwo(Client $client, Node $node)
    {
        // ...
    }
}

这可能吗?

1 个答案:

答案 0 :(得分:0)

我回过头来看,我认为答案是否定的。这比任何事情都更清晰。因为PHP只允许你返回一个变量,所以你需要在PHPUnit级别引入额外的注释逻辑来告诉它你返回的不是一个值而是一个值数组。

另一方面,我发现使用@depends返回对象会变得棘手。例如,如果你有两个测试都依赖于集合@depends createUser。结果是参考。然后testOne更改它的用户对象,因为它是引用testTwo现在将获得已更改的用户对象。

我原本以为@depends返回值的想法太棒了,但实际上我已经停止使用了它。