1

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

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

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++ 中远离它(欢迎发表意见)。

通用的应用/删除方法似乎也是一个不错的选择,但不会那么容易,因为没有抽象的变换类型并且变换之间的一致性很小(可能仍然是一个不错的选择,因为没有那么多类型的变换)。

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

任何输入将不胜感激。

4

1 回答 1

0

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

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

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

于 2013-06-03T21:44:11.893 回答