Catch2 - 为不同的测试文件使用不同的模拟数据填充单例

Catch2 - Populating singleton with different mock data for different test files

我在我的 C++ 项目中使用 Catch2 进行单元测试。我有一个单身人士 class 并且它被用于不同的测试文件。例如,一个文件可能正在测试单例本身,而另一个文件可能正在测试单例与另一个组件之间的交互。因此,我想知道是否有一种方法可以为每个测试文件使用不同的模拟数据集填充单例 class。

据我所知,似乎有两种方法可以解决。

  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
    }
}

然而,这意味着设置函数将在每个测试文件中 运行 两次,这是不必要的,也是我希望避免的。我也不想将所有测试集中在一个 SECTION/TEST_CASE.

  1. 使用Listeners

我知道我可以创建和注册我自己的 Listener class 并覆盖 testCaseStartingtestCaseEnded 方法,这似乎适用于所有 TEST_CASE,但我想对 TestA 和 TestB 进行不同的设置。

因此有没有更好的方法我可以在每个测试文件中以不同的方式设置我的单例 class 这样它类似于 运行 在开始和结束时设置和拆卸功能在每个测试文件中?

你可能想要一个夹具。

夹具文档:https://github.com/catchorg/Catch2/blob/master/docs/test-fixtures.md