首页 > 解决方案 > 您可以使用 Google Test 将复杂类型传递给参数化测试吗?

问题描述

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

INSTANTIATE_TEST_SUITE_P(InstantiationName,
                         FooTest,
                         testing::Values("meeny", "miny", "moe"));

无论如何在将它们传递给之前构造更多的c,例如向量testing::Values

标签: c++googletest

解决方案


您可以将许多不同的类型传递给参数化类型,例如向量:

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 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"}));

INSTANTIATE_TEST_CASE_P目前使用的是 1.8;INSTANTIATE_TEST_SUITE_P应用于较新版本的 gtest)。


推荐阅读