【问题标题】:Can cxxtest suite be dynamically extended at run-time?cxxtest 套件可以在运行时动态扩展吗?
【发布时间】:2010-09-21 17:44:38
【问题描述】:

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

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

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

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

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

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

谢谢,

-- 乔根森--

【问题讨论】:

    标签: testing tdd methodology cxxtest


    【解决方案1】:

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

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

    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
    }
    

    要使用该功能,请在运行 cxxtestgen 时省略 --error-printer 选项,在文件末尾添加 <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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多