2

Catch2 の最新 (2.4.0) バージョンで実行する次のコードがあります。

#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)

明らかに、テスト ケースは 2 回 (セクションごとに 1 回) 実行されます。

セクションの 1 つで assert を変更すると、たとえばREQUIRE(x == 0)、もう一度、すべてが期待どおりに機能し、Catch2 は各セクションを 1 回実行し、最初のセクションが失敗したことを通知します。ただし、両方のセクションでassert を に変更すると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

テストは明らかに3 回実行され、最後の回は両方のセクションをバイパスします。この動作は予期されたものですか? Catch2 ドキュメントを見てみましたが、関連するものが見つかりませんでした。

4

1 に答える 1