我在C++项目中使用Catch2进行单元测试。我有一个singleton类,它正在不同的测试文件中使用。例如,一个文件可能正在测试单例本身,而另一个文件则在测试单例和另一个组件之间的交互。因此,我想知道是否有一种方法可以为每个测试文件用不同的模拟数据集填充singleton类。
据我所知,我似乎有两种方法可以走。
- 使用测试用例和部分
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下。
Listeners
的使用
我知道我可以创建和注册我自己的Listener
类,并覆盖testCaseStarting
和testCaseEnded
方法,这似乎适用于所有的TEST_CASE,但我希望对TestA和TestB有不同的设置。
因此,有没有更好的方法可以在每个测试文件中以不同的方式设置我的singleton类,这样它就类似于在每一个测试文件的开头和结尾运行一个setup-and-teardown函数?
您可能想要一个Fixture。
夹具文件:https://github.com/catchorg/Catch2/blob/master/docs/test-fixtures.md