从cpp单元测试用例中为规范生成参考测试文件

Producing reference test files out of CPPunit test cases for a specification

本文关键字:范生成 参考 测试 文件 cpp 单元 测试用例      更新时间:2023-10-16

我正在为一个处理数据转换的规范编写一个参考实现。

我有一些测试用例检查数据是否正确地向前和向后转换,例如:

void test(){
    int x[maxTest], y[maxTest], z[maxTest];
    fillRandomly(x, testSize);
    MyTransform trans = MyTransform(testsize);
    trans.apply(x, testSize, y);
    trans.remove(y, testSize, z);
    for(int i = 0; i < testSize; i++)
        CPPUNIT_ASSERT(abs(x[i] - z[i]) < 2);
}

数据类型在测试用例和转换之间变化很大。

我想生成的是包含输入/输出和中间阶段的文件,以便进一步的实现可以验证它们的结果。

有一些明显的方法可以让这个工作(例如,命名输出文件并把所有东西都放进去),但大多数方法都意味着回到每个测试用例和一大堆复制粘贴。

来自Java,内省让我想到了一个包装器来解决我的一些问题(自动命名测试输出文件…),但不是全部,我被建议在c++中远离它(欢迎意见)。

通用的apply/remove方法似乎也是一个很好的选择,但不会那么容易,因为没有抽象的转换类型和转换之间的一致性(可能仍然是一个很好的选择,因为没有那么多类型的转换)。

所以我想知道你们中是否有人做过类似的事情,以及你们是如何解决的。我不介意修改所有的测试用例,如果这意味着以后我可以有一些干净的东西。

您所描述的并不是一个真正的单元测试,因此单独使用CppUnit可能不是您的最佳选择。

看起来你正在尝试做三件独立的事情,但把它们结合在一起一次完成它们。您想要运行单元测试,您想要生成测试数据,您想要验证程序与生成的数据一起工作,并且您试图在单个单元测试框架内完成所有这些工作。但是因为它做了很多事情,你发现很难重用。

考虑将其简化为三个测试应用程序:一个CppUnit测试套件,只执行单元测试(这些测试应该与测试数据文件无关);测试数据发生器;还有一个转换测试员。每次构建时都应该运行自动化单元测试。当您运行数据生成器时,您应该在它输出的数据上自动执行测试器,以确保您生成了良好的数据。然后,您可以将已知的测试数据和测试应用程序交付给您的客户端。