c++ - 从规范的 CPPunit 测试用例中生成引用测试文件

标签 c++ cppunit

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

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

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,我想到了内省(introspection)和包装器来解决我的一些问题(测试输出文件的自动命名......),但不是全部,我被建议在 C++ 中远离它(意见欢迎)。

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

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

如有任何意见,我们将不胜感激。

最佳答案

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

看起来您正在尝试做三件独立的事情,但将它们组合在一起一次完成。您想要运行单元测试,想要生成测试数据,并且想要验证程序是否可以使用生成的数据,并且您正试图在单个单元测试框架内完成所有这些工作。但由于它的作用如此之大,您会发现它很难重用。

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

关于c++ - 从规范的 CPPunit 测试用例中生成引用测试文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357726/

相关文章:

c++ - 如何使用 cppunit 显示测试方法名称

c++ - 单元测试析构函数?

c++ - 在 64 位 linux armv8 机器上编译 32 位二进制文​​件时遇到问题

c++ - 使用 C++ 在 Xcode GDB 中打印不打印正确的值

c++ - 在不给参数值的情况下使用 boost::options

c++编译cppunit文件并执行xml报告

C++ Linux : Process PID from its path

C++ - 从类外部更改私有(private)成员

c++ - 单位;试图编译类来测试

c++ - cppunit:setUp() 和 tearDown()