为 Google 测试夹具指定构造函数参数

新手上路,请多包涵

使用 Google 测试,我想指定一个测试夹具以用于不同的测试用例。夹具应分配和取消分配类 TheClass 及其数据管理类 TheClassData 的对象,其中数据管理类需要数据文件的名称。

对于不同的测试,文件名应该不同。

我定义了以下夹具:

 class TheClassTest : public ::testing::Test {
 protected:
  TheClassTest(std::string filename) : datafile(filename) {}
  virtual ~TheClassTest() {}
  virtual void SetUp() {
    data = new TheClassData(datafile);
    tc = new TheClass(data);
  }
  virtual void TearDown() {
    delete tc;
    delete data;
  }

  std::string datafile;
  TheClassData* data;
  TheClass* tc;
};

现在,不同的测试应该使用具有不同文件名的夹具。将其想象为设置测试环境。

问题: 如何从测试中指定文件名,即如何调用夹具的非默认构造函数?

我发现了 ::testing::TestWithParam<T>TEST_P 之类的东西,这无济于事,因为我不想使用不同的值运行一项测试,而是使用一个夹具进行不同的测试。

原文由 Gregor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
1 个回答

正如另一位用户所建议的那样,您无法通过使用非默认构造函数实例化夹具来实现您想要的。但是,还有其他方法。只需重载 SetUp 函数并在测试中显式调用该版本:

 class TheClassTest : public ::testing::Test {
protected:
    TheClassTest() {}
    virtual ~TheClassTest() {}
    void SetUp(const std::string &filename) {
        data = new TheClassData(filename);
        tc = new TheClass(data);
    }
    virtual void TearDown() {
        delete tc;
        delete data;
    }

    TheClassData* data;
    TheClass* tc;
};

现在在测试中只需使用这个重载来设置文件名:

 TEST_F(TheClassTest, MyTestCaseName)
{
    SetUp("my_filename_for_this_test_case");

    ...
}

无参数的 TearDown 会在测试完成后自动清理。

原文由 Marko Popovic 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题