2013-05-03 37 views
1

我正在为处理数据转换的规范编写参考实现。从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,自省想到一个包装来解决我的一些问题(自动命名测试输出文件...),但不是所有的,我建议远离它在C++(意见欢迎)。

泛型应用/删除方法似乎也是一个很好的候选人,但不会那么容易,因为没有抽象变换类型和变换之间很少符合(可能仍然是一个不错的选择,因为没有很多类型的变换)。

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

任何输入将不胜感激。

+0

你想在这些文件中再次存储什么? – 2013-05-03 11:43:10

+0

[Boost.Serialization](http://www.boost.org/libs/serialization/doc/index.html)有用吗? – 2013-05-03 11:50:01

+0

在文件中,我想存储输入数据和每个变换的输出数据,在这种情况下,x和z。这种方式在重新实现时很容易确保一切都是正确的。序列化并不真正适合我的需求。 – 2013-05-03 12:39:58

回答

0

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

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

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