C++ 你能用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

使用Google Test将值传递到参数化测试时:

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
;看见