在单元测试中避免大的参考数据

时间:2014-06-21 10:19:00

标签: unit-testing testing

我想为计算相对大量数据的函数的正确性编写一个单元测试,例如,

A = compute_that_matrix()

我现在可以计算一次矩阵,确保结果正确,将原始数据存储为参考数据,然后对其进行测试:

Aref = read_reference_data('reference.dat')
A = compute_that_matrix()
assert(norm(A - Aref) < 1.0e-13)

然而,这需要我发送看似不太理想的二进制blob reference.dat

断言compute_that_matrix()等函数正确性的其他常用方法是什么?

2 个答案:

答案 0 :(得分:3)

如果不能选择减少矩阵,那么将正确答案作为数据blob(甚至内联到测试代码中)发送似乎是合理的事情。

如果幸运的话,您可以找到并实施独立的第二种计算正确答案的方法。接下来的挑战是,在测试失败的情况下,有两种不同的代码库可供调试。

答案 1 :(得分:3)

虽然您给出的测试可以完成锁定代码以防止意外中断更改,但它并不理想,因为它对结果没有任何说明。参考数据对测试的读者没有任何意义。

该测试也可能过度限制您的结果。您可能会进行一些代码更改,这会使您的代码更清晰或更快,从而无意中将结果更改为无关紧要的数据,或者更改一个您根本不关心的元素,但该测试将禁止这种变化。

你能够以某种方式确保结果是正确的&#34;。你是怎么做到的? 无论你采取什么手动检查结果,都要编写单元测试来检查。你的测试实际上会说一些有用的东西 - 会在某种程度上描述算法,而且他们只会限制什么他们需要约束。