У меня есть следующий фрагмент кода, который я запускаю с последней (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 запускает каждый раздел один раз и сообщает мне, что первый вышел из строя.Однако, если я изменю утверждение на 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, но не смог найти ничего подходящего.