我希望使用其他测试项动态扩展我的CxxTest Suite,但我发现所有测试场景都必须在编译时可用(硬编码)。
我的情况是,我有一个相当庞大的C ++类,有20多种方法需要测试。此类需要针对40多种不同的数据集进行测试。这些数据集是通过类构造函数获得的,通过参数控制。
我的主要目标是避免为不同的数据集重写相同的20个测试用例。我想使用包含数据集列表的控制文件,并为同一个测试套件创建不同的灯具。
Q1)如何动态地(在运行时)向测试套件添加更多测试?
Q2)可以在运行时动态添加灯具吗?是否有更好的测试套件允许动态固定装置?
Q3)这是TDD技术避免的吗?任何人都对TDD技术有了很好的总结。
谢谢,
- J Jorgenson -
答案 0 :(得分: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
}
要使用该功能,请在运行--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;
}