【问题标题】:Can you pass in complex types into Parameterised Tests with Google Test?您可以使用 Google Test 将复杂类型传递给参数化测试吗?
【发布时间】:2020-05-24 23:25:54
【问题描述】:

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

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

在将它们传递给testing::Values之前,是否可以构造更多的c,例如向量?

【问题讨论】:

    标签: c++ googletest


    【解决方案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)。

    【讨论】:

    • 感谢@Quarra 的示例,我想在传递到 testing::Value 之前构建对象层,并且不限于在 testing::Values 中内联构造这些对象。有没有可能学会这种力量?
    • @pingu,对不起,我一定误解了这个问题。你能详细说明到底需要什么吗?鉴于MyParam 是更复杂的类型,它的构造可以由该结构的用户定义ctor 处理。如果要对某些全局变量运行测试,请使用testing::ValuesIn。如果需要生成不同的可能组合,请使用::testing::Combinestd::tuple 而不是MyParam;见stackoverflow.com/questions/6256758/…
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多