1

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

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

  1. 使用测试用例和部分

测试A.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
    }
}

测试B.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类并覆盖testCaseStartingandtestCaseEnded方法,这似乎适用于所有 TEST_CASE,但我希望为 TestA 和 TestB 设置不同的设置。

因此,有没有更好的方法可以在每个测试文件中以不同方式设置我的单例类,以便类似于在每个测试文件的开头和结尾运行设置和拆卸功能?

4

1 回答 1

1

你可能想要一个夹具。

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

于 2020-09-22T16:18:21.080 回答