C++ 如何使用参数化测试用例?
我正在尝试使用参数化测试来测试一个以POD为参数的类。我已经到了这个阶段:C++ 如何使用参数化测试用例?,c++,c++11,googletest,C++,C++11,Googletest,我正在尝试使用参数化测试来测试一个以POD为参数的类。我已经到了这个阶段: struct TestParameters : public ::testing::TestWithParam<parameters> { parameters params; virtual void SetUp() { params.username = "username"; params.host = "192.168.0.254"; } }; TEST_P(TestP
struct TestParameters : public ::testing::TestWithParam<parameters> {
parameters params;
virtual void SetUp() {
params.username = "username";
params.host = "192.168.0.254";
}
};
TEST_P(TestParameters, connect) {
std::error_code ec;
std::unique_ptr<connection> connection = make_connection(GetParam(), ec);
ASSERT_FALSE(ec);
ec = connection->connect();
ASSERT_FALSE(ec);
}
INSTANTIATE_TEST_CASE_P(postgresql_tcp, connection, ::testing::Values());
struct TestParameters:public::testing::TestWithParam{
参数参数;
虚拟空间设置(){
params.username=“username”;
params.host=“192.168.0.254”;
}
};
测试P(测试参数,连接){
std::错误代码ec;
std::unique_ptr connection=make_connection(GetParam(),ec);
断言错误(ec);
ec=连接->连接();
断言错误(ec);
}
实例化_TEST_CASE_P(postgresql_tcp,连接,::testing::Values());
我的问题是,如何通过
INSTANTIATE\u TEST\u CASE\u p
传递参数中所需的值,以及如何将参数的有效实例传递给make\u connection()
?看起来您应该按照
INSTANTIATE_TEST_CASE_P(postgresql_tcp, connect,
::testing::Values(parameters{"username", "192.168.0.254"}
//, parameters{ other params here }
));
或者您可以将std::vector
声明为可以动态计算的全局变量,然后将该向量的迭代器传递给::testing::Values()
另外,请注意,您不需要fixture类中的成员params
,因为该参数将由Google Test通过GetParam()自动输入。没有解释这一点吗?我不想为我的POD创建构造函数。可以就地创建对象吗?在我的示例中,聚合构造就是这样做的。假设您的类型定义如下:struct参数{std::string username;std::string host;}
你可以通过编写参数{“username”,“192.168.0.254”}
cf来构造一个实例,我可以让聚合初始化器在一般情况下工作,只是不能在Google测试上工作。我只是在一个简单的例子中尝试了它,它对我来说很有效。你在用什么编译器?您是否向它传递了任何标志,以便在您的测试项目中至少启用C++11?实际的错误消息是什么?