能否在Google Test的参数化测试中传递复杂类型?

问题描述 投票:0回答:1

当使用Google Test将值传递到参数化测试中时。

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

有没有办法在将它们传入之前,先构造更多的c,比如一个向量 testing::Values?

c++ googletest
1个回答
1
投票

你可以向参数化类型传递许多不同的类型,例如矢量。

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)。

© www.soinside.com 2019 - 2024. All rights reserved.