PHPUnit:一个测试失败时跳过所有测试

3

我的测试用例中的所有测试都依赖于第一个测试的通过。现在我知道我可以将@depends注释添加到其余的测试中,但我正在寻找一种快捷方式来将注释添加到每个其他测试方法中。有没有一种方法告诉PHPUnit:“如果这一个失败,跳过其余测试”?


1
这里有 --stop-on-error 和 --stop-on-failure 开关。 - Mike B
1
@MikeB - 这些将跳过所有进一步的测试--不仅仅是在mellowsoon请求的同一个测试用例中的测试。 - David Harkness
2
@DavidHarkness,这就是为什么我将其留作评论而不是回答的原因。OP没有深入探讨请求背后的目标,所以我只是随意提出了一些想法。 - Mike B
我认为他们希望代码能够继续执行测试中的其他断言。例如,如果我正在检查3个不同的条件,我想知道测试中的所有三个断言是否单独通过或失败,而不是必须检查一个,再次运行测试,检查下一个问题,然后甚至是第三个问题。PHPUnit不能被指示这样做吗,以便可以执行testXXXX函数中的所有测试吗? - Steven Scott
2个回答

6
您可以将特定的测试添加到您的setup()方法中。这将使得所有测试失败时跳过该测试,例如:
public function setup()
{
    $this->subjectUnderTest = new SubjectUnderTest;
    $this->assertPreconditionOrMarkTestSkipped();
}

public function assertPreconditionOrMarkTestSkipped()
{
    if ($someCondition === false) {
        $this->markTestSkipped('Precondition is not met');
    }
}

6
与Gordon的答案类似,但是不需要将第一个测试移动到setUp中,一种类似的方法是在第一个测试中基于其成功/失败设置一个类级属性,并在setUp中检查此属性。唯一的区别是现在第一个测试只会执行一次。
private static $firstPassed = null;

public function setup() {
    if (self::$firstPassed === false) {
        self::markTestSkipped();
    }
    else if (self::$firstPassed === null) {
        self::$firstPassed = false;
    }
}

public function testFirst() {
    ... the test ...
    self::$firstPassed = true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接