1

C++ プロジェクトで単体テストに Catch2 を使用しています。シングルトン クラスがあり、別のテスト ファイルで使用されています。たとえば、あるファイルがシングルトン自体をテストし、別のファイルがシングルトンと別のコンポーネント間の相互作用をテストしている場合があります。そのため、シングルトン クラスにテスト ファイルごとに異なるモック データのセットを設定する方法があるかどうか疑問に思っていました。

私の知る限り、私には2つの方法があるようです。

  1. テスト ケースとセクションの使用

TestA.cpp

TEST_CASE("A") {
    SingletonClass& sc = SingletonClass::getInstance();
    sc.clear();
    sc.add(data1);
    sc.add(data2);
    // ... more methods to populate singletonClass
  
    SECTION("Check A1"){
        // Perform test checks
    }

    SECTION("Check A2"){
        // Perform test checks
    }
}

TestB.cpp

TEST_CASE("B") {
    SingletonClass& sc = SingletonClass::getInstance();
    sc.clear();
    sc.add(data3);    // Different data from TestA.cpp
    sc.add(data4);
    // ... more methods to populate singletonClass
  
    SECTION("Check B1"){
        // Perform test checks
    }

    SECTION("Check B2"){
        // Perform test checks
    }
}

ただし、これはセットアップ関数が各テスト ファイルで 2 回実行されることを意味します。これは必要ではなく、回避したいと考えています。また、すべてのテストを 1 つの SECTION/TEST_CASE にまとめる必要もありません。

  1. の使用Listeners

Listener独自のクラスを作成して登録し、メソッドとメソッドをオーバーライドtestCaseStartingできることを理解していますtestCaseEnded。これはすべての TEST_CASE に当てはまるようですが、TestA と TestB に異なる設定をしたいと考えています。

したがって、各テストファイルの最初と最後にセットアップと分解機能を実行するのと同じように、各テストファイルでシングルトンクラスを別々にセットアップできるより良い方法はありますか?

4

1 に答える 1

1

おそらくFixtureが必要です。

フィクスチャのドキュメント: https://github.com/catchorg/Catch2/blob/master/docs/test-fixtures.md

于 2020-09-22T16:18:21.080 に答える