2010-09-21 55 views
1

我希望动态扩展我的CxxTest Suite附加测试项目,但我发现所有的测试场景必须在编译时可用(硬编码)。cxxtest套件可以在运行时动态扩展吗?

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

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

Q1)如何动态地(在运行时)向测试套件添加更多测试? Q2)可以在运行时动态添加灯具吗?是否有更好的测试套件可用于动态装置?

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

感谢,

- J·乔根森 -

回答

1

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

您可以修改您的构建设置以在不同时间调用测试程序,每次在命令行上传递不同的参数。该计划中的折痕是由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 
} 

要使用该功能,省略--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; 
} 
相关问题