我正在为处理数据转换的规范编写参考实现。
我有许多测试用例可以检查数据是否正确地向前和向后转换,例如:
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 :(得分:0)
你所描述的并不是一个真正的单元测试,所以单独的CppUnit可能不是你的最佳选择。
看起来你正在尝试做三件独立的事情,但是他们把它们组合起来一次完成它们。您希望运行单元测试,要生成测试数据,并且希望验证程序是否与生成的数据一起使用,并且您尝试在单个单元测试框架内完成所有操作。但是因为它做得太多,你发现很难重复使用。
考虑将其简化为三个完整的测试应用程序:一个仅执行单元测试的CppUnit测试套件(这些测试应该与测试数据文件无关);测试数据生成器;和变换测试员。每次构建时都应该运行自动单元测试。运行数据生成器时,应该根据输出的数据自动执行测试程序,以确保生成良好的数据。然后,您可以将已知的测试数据和测试器应用程序提供给您的客户。