【发布时间】:2016-11-07 12:31:12
【问题描述】:
通过 Google 测试,我想指定一个用于不同测试用例的测试夹具。
夹具应分配和释放类TheClass及其数据管理类TheClassData的对象,其中数据管理类需要数据文件的名称。
对于不同的测试,文件名应该不同。
我定义了以下 Fixture:
class TheClassTest : public ::testing::Test {
protected:
TheClassTest(std::string filename) : datafile(filename) {}
virtual ~TheClassTest() {}
virtual void SetUp() {
data = new TheClassData(datafile);
tc = new TheClass(data);
}
virtual void TearDown() {
delete tc;
delete data;
}
std::string datafile;
TheClassData* data;
TheClass* tc;
};
现在,不同的测试应该使用具有不同文件名的夹具。 将其想象为设置测试环境。
问题:如何从测试中指定文件名,即如何调用夹具的非默认构造函数?
我发现了诸如 ::testing::TestWithParam<T> 和 TEST_P 之类的东西,这并没有帮助,因为我不想用不同的值运行一个测试,而是用一个夹具运行不同的测试。
【问题讨论】:
-
所以你想自己运行那个夹具? google test 默认测试运行器无法实例化带参数的fixture。
-
我想使用夹具运行测试(可能是
TEST_F)。所以答案是,这不可能吗?谢谢。 -
我认为
TestWithParam<T>和TEST_P正是您所需要的。查找Advanced Docs 如何在实践中使用它们。您始终可以在测试用例中实例化被测实例(我假设它是TheClass)。
标签: c++ unit-testing constructor googletest