testing - cxxtest 套件可以在运行时动态扩展吗?

标签 testing tdd methodology cxxtest

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

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

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

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

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

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

谢谢,

-- 乔根森 --

最佳答案

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

您可以修改build设置以调用测试程序 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>在文件末尾,并使用 the --template option to generate your test program .

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

int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}

关于testing - cxxtest 套件可以在运行时动态扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762968/

相关文章:

forms - 测试中如何生成flask_wtf Form的post请求数据

asp.net-mvc - 单元测试和 HttpContext.Current

Git:大项目开发流程的最佳实践

methodology - 业余爱好者应该怎么做才能在掌握基础知识后培养良好的编程技能?

javascript - 如何使用 practicalmeteor :mocha 对 meteor 方法进行单元测试

ruby-on-rails - 无法运行 Minitest - 在 MiniTest::Unit::TestCase 中获取未定义的类变量

scala - Play Framework 2.0 和 Selenium 入门

javascript - JS 测试运行器 html 与生产 html?

oop - 我如何用看似无目标的想法构建面向对象的软件?

c# - 通过 visual studio 并行测试执行,测试被跳过