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, но не смог найти ничего подходящего.

1 ответ

Из документов:

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

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

Другие вопросы по тегам