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

2

Решение

От документы:

Один листовой раздел выполняется при каждом запуске через TEST_CASE. Другие разделы пропущены. В следующий раз выполняется следующий раздел и так далее, пока не встретятся новые разделы.

Таким образом, проблемный тест должен быть выполнен 3 раза.

0

Другие решения

Других решений пока нет …