C++ 你能用Google Test将复杂类型传递到参数化测试中吗?
使用Google Test将值传递到参数化测试时:C++ 你能用Google Test将复杂类型传递到参数化测试中吗?,c++,googletest,C++,Googletest,使用Google Test将值传递到参数化测试时: INSTANTIATE_TEST_SUITE_P(InstantiationName, FooTest, testing::Values("meeny", "miny", "moe")); 在将它们传递到testing::Values之前,是否还要构造更多的c,例如向量?您可以将许多不同的类型传递给参数化类型,例如向量: struct Vect
INSTANTIATE_TEST_SUITE_P(InstantiationName,
FooTest,
testing::Values("meeny", "miny", "moe"));
在将它们传递到
testing::Values
之前,是否还要构造更多的c,例如向量?您可以将许多不同的类型传递给参数化类型,例如向量:
struct VectorTest : public testing::TestWithParam<std::vector<int>> {};
TEST_P(VectorTest, MyTestCase) {
auto expectedVector = std::vector<int>{42, 314, 271, 161};
ASSERT_EQ(expectedVector, GetParam());
}
INSTANTIATE_TEST_CASE_P(VectorInstantiationName,
VectorTest,
testing::Values(std::vector<int>{42, 314, 271, 161}));
struct-VectorTest:public-testing::TestWithParam{};
测试P(向量测试,MyTestCase){
auto-expectedVector=std::vector{42314271161};
ASSERT_EQ(expectedVector,GetParam());
}
实例化测试用例(向量安装名称,
矢量测试,
测试::值(标准::向量{42314271161});
或用户定义的类型:
struct MyParam {
int i;
std::string s;
};
struct MyTest : public testing::TestWithParam<MyParam> {};
TEST_P(MyTest, MyTestCase) {
ASSERT_EQ(42, GetParam().i);
ASSERT_EQ("foo", GetParam().s);
}
INSTANTIATE_TEST_CASE_P(InstantiationName,
MyTest,
testing::Values(MyParam{42, "foo"}));
struct MyParam{
int i;
std::字符串s;
};
struct MyTest:public testing::TestWithParam{};
测试(MyTest,MyTestCase){
ASSERT_EQ(42,GetParam().i);
ASSERT_EQ(“foo”,GetParam().s);
}
实例化测试案例(实例化名称,
我的测试,
测试::值(MyParam{42,“foo”});
(使用
INSTANTIATE_-TEST_-CASE_-p
,就像我目前在1.8上一样;INSTANTIATE_-TEST_-SUITE_-p
将用于更新版本的gtest)。感谢@Quarra的示例,我想在传递到testing::Value之前构建对象层,并且不限于在testing::Values中内联构造这些对象。有可能学会这种力量吗?@pingu,对不起,我一定是误解了这个问题。你能详细说明到底需要什么吗?鉴于MyParam
是更复杂的类型,它的构造可以由该结构的用户定义的ctor处理。如果要对某些全局变量运行测试,请使用testing::ValuesIn
。如果需要生成不同的可能组合,请使用::testing::Combine
和std::tuple
代替MyParam
;看见