如何准备参数化测试的数据?

时间:2013-11-20 14:37:55

标签: c++ googletest

我最近开始使用gtest,并遇到了问题。我想对文件夹中的文件运行一组测试,应该枚举这些测试。我已设法使用文件列表中的数据创建测试和实例化t,但遇到了概念性问题。

我所做的是创建一个全局列表来保存文件名并在调用testing::InitGoogleTest之前填充它。这很有效。

然而,我使用全局变量的事实让我感到困扰。我试图将列表初始化移动到我自己的testing::Environment后代,但这导致测试实例化失败。更准确地说,列表已填满但未使用其中的数据运行测试。

所以,我的问题是:

  1. testing::Environment应该包含什么类型的数据?
  2. 使用动态生成的列表初始化参数化测试的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

  1. 这完全取决于你。
  2. 没有'正确'的方式。如果厌恶全局变量,可以创建一个全局函数或静态类方法,从光盘加载测试参数并将它们返回到容器(矢量,列表等)中,并在测试实例化宏中使用该方法。
  3. E.g:

    std::vector<std::string> LoadValuesFromDisc() {
      std::vector<std::string> result;
      // Fill in result with data here...
      return result;  // RVO will ensure there are no unnecessary copies.
    }
    
    INSTANTIATE_TEST_CASE_P(
        InstantiationName, TestFixture, testing::ValuesIn(LoadValuesFromDisc());