C++ 如何使用参数化测试用例?

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

我正在尝试使用参数化测试来测试一个以POD为参数的类。我已经到了这个阶段:

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?实际的错误消息是什么?