C++ 将数组传递给gtest中的参数化测试

C++ 将数组传递给gtest中的参数化测试,c++,qt,googletest,googlemock,C++,Qt,Googletest,Googlemock,gtest中的参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本 我见过传递值、std::pair、std::tuple等的示例 但我不知道如何将数组/初始值设定项列表传递到测试中 我期待这样的事情: INSTANTIATE_TEST_SUITE_P(Sample, FooTest, testing::Values({1,23,53},{534,34,456)); 可能吗?如果是,如何传递?您可以传递任何类型作为参数。当您从类

gtest中的参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本

我见过传递值、std::pair、std::tuple等的示例

但我不知道如何将数组/初始值设定项列表传递到测试中

我期待这样的事情:

INSTANTIATE_TEST_SUITE_P(Sample, FooTest,
                         testing::Values({1,23,53},{534,34,456));

可能吗?如果是,如何传递?

您可以传递任何类型作为参数。当您从类模板
WithParamInterface
(或
TestWithParam
)继承测试夹具a时,您可以提供参数类型:

class FooTest:public TestWithParam
//类FooTest:public TestWithParam
//class FooTest:public TestWithParam//我不确定这是否是个好主意,初始值设定项\u list有奇怪的生命周期管理
{};
实例化测试套件(样本、最足部、,
测试::值(std::数组{1,23,53},
std::数组{534,34456});
.
您不能使用裸括号init list并让编译器推断类型,因为
::testing::Values()
接受模板参数,而编译器不知道该模板参数应该是什么类型


假设我们有
类BarTest:publicttestwithparam
。到
::testing::Values
我们可以传递实际的std::string对象
::testing::Values(std::string{“asdf”},“qwer”s)
或隐式转换为std::string的对象,比如string literal:
::testing::Values(“zxcv”)
。后者将类型推断为
const char*
,实际的std::string在GoogleTest代码中构造得更深。

否这将导致编译器错误。``错误:函数参数太多'测试::内部::ValueArray测试::Values(T…[带T={}]“``@PorottayumBeefum-Hmm,看起来这里需要显式命名类型,我不知道为什么:。我将编辑我的答案。非常感谢!我还尝试了包含数组的std::tuple/std::pair,它工作正常。
class FooTest: public TestWithParam<std::array<int, 3>>
//class FooTest: public TestWithParam<std::vector<int>>
//class FooTest: public TestWithParam<std::initializer_list<int>> //I'm not sure if this is a good idea, initializer_list has weird lifetime management
{};

INSTANTIATE_TEST_SUITE_P(Sample, FooTest,
                         testing::Values(std::array<int, 3>{1,23,53},
                                         std::array<int, 3>{534,34,456});