1

我希望使用其他测试项目动态扩展我的CxxTest Suite,但我发现所有测试场景必须在编译时可用(硬编码)。

我的情况是我有一个相当庞大的 C++ 类,它有 20 多个要测试的方法。此类需要针对 40 多个不同的数据集进行测试。这些数据集是通过类构造函数获得的,通过参数控制。

我的主要目标是避免为不同的数据集重写相同的 20 个测试用例。我想使用一个包含数据集列表的控制文件,并为同一个测试套件创建不同的夹具。

Q1)如何动态(在运行时)向测试套件添加更多测试?

Q2) 可以在运行时动态添加夹具吗?是否有更好的测试套件允许动态夹具?

Q3) 这是 TDD 技术避免的事情吗?任何人都对 TDD 技术有很好的总结。

谢谢,

-- 乔根森 --

4

1 回答 1

1

实际上没有任何直接的方法可以做到这一点。测试的数量是在编译时间之前确定的,当你运行cxxtestgen. 它解析您的文件并查找以 . 开头的方法名称test。它还找到TestSuite后代并生成代码以实例化每个后代。您可以在每个测试套件上编写一个createSuite函数来将参数传递给套件的构造函数,但您仍然仅限于返回一个对象。

您可以修改构建设置以调用测试程序 40 次不同的时间,每次在命令行上传递不同的参数。该计划的问题是mainCxxTest 生成的默认值不接受命令行参数。您需要提供自己的实现来检查参数,然后调用正常的测试运行器。像这样的东西:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}

要使用该功能,请在运行时省略该--error-printer选项,在文件末尾cxxtestgen添加,然后使用选项生成您的测试程序<CxxTest world>--template

但只要您编写自己的main,您也可以尝试在那里解析您的数据集文件,然后多次调用测试运行程序。像这样的东西:

int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
于 2011-02-03T19:10:09.603 回答