按特定顺序运行 PHPUnit 测试

2022-08-30 08:25:14

有没有办法让 a 内部的测试以特定顺序运行?例如,我想将对象的生命周期从创建到使用再到销毁分开,但我需要确保在运行其他测试之前先设置对象。TestCase


答案 1

PHPUnit 支持通过@depends注释来测试依赖项。

下面是文档中的一个示例,其中测试将按满足依赖项的顺序运行,每个依赖测试将一个参数传递给下一个测试:

class StackTest extends PHPUnit_Framework_TestCase
{
    public function testEmpty()
    {
        $stack = array();
        $this->assertEmpty($stack);

        return $stack;
    }

    /**
     * @depends testEmpty
     */
    public function testPush(array $stack)
    {
        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertNotEmpty($stack);

        return $stack;
    }

    /**
     * @depends testPush
     */
    public function testPop(array $stack)
    {
        $this->assertEquals('foo', array_pop($stack));
        $this->assertEmpty($stack);
    }
}

但是,重要的是要注意,具有未解析依赖项的测试将不会执行(这是可取的,因为这会迅速引起对失败测试的关注)。因此,在使用依赖项时,请务必密切注意。


答案 2

也许测试中存在设计问题。

通常,每个测试都不能依赖于任何其他测试,因此它们可以按任何顺序运行。

每个测试都需要实例化和销毁它需要运行的所有内容,这将是完美的方法,你永远不应该在测试之间共享对象和状态。

您能更具体地说明为什么N个测试需要相同的对象吗?


推荐