我希望动态扩展我的 CXXTEST套房 有了其他测试项目,但是正在发现所有测试场景都必须在编译时可用(硬编码)。

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

我的主要目的是避免为不同的数据集重写相同的20个测试用例。我想使用包含数据集列表的控制文件,并且只需为同一测试套件创建不同的固定装置即可。

Q1)一个人(在运行时间)如何在测试套件中添加更多测试?

Q2)一个人可以在运行时动态添加灯具吗?是否有更好的测试套件可以进行动态固定装置?

Q3)这是TDD技术避免的事情吗?任何人都可以很好地摘要TDD技术。

谢谢,

- J Jorgenson-

有帮助吗?

解决方案

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

您可以修改构建设置,以调用测试程序40个不同时间,每次在命令行上传递另一个参数。该计划中的皱纹是默认 main 由CXXTEST生成的不接受命令行参数。您需要提供自己的实现,以检查参数,然后随后调用普通测试跑者。这样的事情:

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top