gpt4 book ai didi

c++ - 为 Google 测试夹具指定构造函数参数

转载 作者:可可西里 更新时间:2023-11-01 16:38:03 25 4
gpt4 key购买 nike

对于 Google 测试,我想指定一个测试夹具以用于不同的测试用例。fixture 应分配和释放 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 ,这没有用,因为我不想用不同的值运行一个测试,而是用一个夹具运行不同的测试。

最佳答案

根据另一位用户的建议,您无法实现您想要的通过使用非默认构造函数实例化夹具。然而,还有其他方法。只需重载 SetUp 函数,然后在测试中显式调用该版本:

class TheClassTest : public ::testing::Test {
protected:
TheClassTest() {}
virtual ~TheClassTest() {}
void SetUp(const std::string &filename) {
data = new TheClassData(filename);
tc = new TheClass(data);
}
virtual void TearDown() {
delete tc;
delete data;
}

TheClassData* data;
TheClass* tc;
};

现在在测试中简单地使用这个重载来设置文件名:

TEST_F(TheClassTest, MyTestCaseName)
{
SetUp("my_filename_for_this_test_case");

...
}

无参数的TearDown会自动清理测试完成。

关于c++ - 为 Google 测试夹具指定构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38207346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com