【问题标题】:PHPUnit: Skipping All Tests When One FailsPHPUnit:当一个失败时跳过所有测试
【发布时间】:2012-09-05 02:51:48
【问题描述】:

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

【问题讨论】:

  • @MikeB - 这些将跳过 所有 进一步的测试 - 而不仅仅是那些在与 mellowsoon 请求相同的测试用例中的那些。
  • @DavidHarkness 这就是为什么我把它作为评论而不是答案。 OP 没有深入研究请求背后的目标,所以我只是把它扔在那里。
  • 我认为他们希望让代码继续进入测试中的其他断言。例如,如果我要检查 3 个不同的条件,我想知道测试中的所有三个断言分别通过或失败,而不是必须审查一个,再次运行测试,审查下一个问题,甚至是第三个。能不能不指令PHPUnit做这个,所以函数testXXXX中的所有测试都可以执行?

标签: php phpunit


【解决方案1】:

您可以将该特定测试添加到您的 setup() 方法中。这将使所有未通过此测试的测试都被跳过,例如

public function setup()
{
    $this->subjectUnderTest = new SubjectUnderTest;
    $this->assertPreconditionOrMarkTestSkipped();
}

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

【讨论】:

    【解决方案2】:

    与 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      相关资源
      最近更新 更多