Catch2 запускает тест еще раз, если все разделы не пройдены - PullRequest
0 голосов
/ 20 сентября 2018

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

0 голосов
/ 20 сентября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...