如果所有部分均失败,Catch2将再次运行测试

时间:2018-09-20 19:38:52

标签: c++ catch2

我有以下代码是使用最新(2.4.0)版本的Catch2运行的:

#include "catch.hpp"
#include <iostream>
TEST_CASE("Test") {
    int x = 0;
    SECTION("A") {
            std::cout << "A";
            ++x;
            REQUIRE(x == 1);
    }
    SECTION("B") {
            std::cout << "B";
            ++x;
            REQUIRE(x == 1);
    }
    std::cout << "X\n";
    REQUIRE(x == 1);
}

如果我运行此命令,一切都会按预期进行,我会得到:

AX
BX
=================================================================
All tests passed (4 assertions in 1 test case)

很明显,测试用例运行两次,每个部分运行一次。

如果我更改其中一个节中的断言,例如对REQUIRE(x == 0)说,一切都按预期进行,Catch2将每个节运行一次,并告诉我第一个失败。但是,如果我在两个部分中将assert更改为REQUIRE(x == 0),则结果令人困惑(我将其略微缩短了):

A
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.out is a Catch v2.4.0 host application.
Run with -? for options
---------------------------------------------------------------------
Test
  A
---------------------------------------------------------------------
test.cpp:10: FAILED:
  REQUIRE( x == 0 )
with expansion:
  1 == 0
B--------------------------------------------------------------------
Test
  B
---------------------------------------------------------------------
test.cpp:15: FAILED:
  REQUIRE( x == 0 )
with expansion:
  1 == 0

X
---------------------------------------------------------------------
Test
---------------------------------------------------------------------
test.cpp:19: FAILED:
  REQUIRE( x == 1 )
with expansion:
  0 == 1
=====================================================================
test cases: 1 | 1 failed
assertions: 3 | 3 failed

该测试显然进行了三次,最后一次绕过了这两个部分。这是预期的行为吗?我尝试查看Catch2文档,但找不到任何相关内容。

1 个答案:

答案 0 :(得分:0)

来自docs

  

通过TEST_CASE每次运行都会执行一个叶子部分。其他部分将被跳过。下次执行下一节,依此类推,直到没有新的节为止。

所以有问题的测试必须运行3次。