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