2011-02-23 72 views
0

我有一个类用作财务应用程序的一部分。该类绑定到一个UI表单并接受一些值,然后用于计算财务数据。计算出的值作为对象的属性显示。其中几项计算使用其他计算。帮助单元测试级联计算

例如,CalculationA可能会返回PropertyA + PropertyB。 CalculationB返回PropertyC - CalculationA。 (这是极端的过度简化)。

我想写一些单元测试,以确保这些计算正确执行,并想知道我应该采取什么方法。

我的第一种方法是手动重新计算测试方法中的预期结果。例如,在测试CalculationB时,我填充测试对象,然后将预期结果设置为等于PropertyC - PropertyA + PropertyB。但由于真实物体涉及25个属性,这非常麻烦。

关于选项,我认为是简单地创建测试对象,用值填充它,然后编写一个测试,验证CalculationA等于PropertyA + PropertyB,另一个验证CalculationB等于PropertyC - CalculationB的测试。后者假定CalculationB是正确的,但这对于单元测试的目的真的很重要吗?

您可以为设置我的测试做些什么指导/建议,使它们准确,可靠和可维护?例如,确保计算正确并且没有意外设置CalculationB = PropertyB - CalculationA的最佳方法是什么?

回答

2

你的情况听起来相当于一个电子表格,电子表格是表单的代码只是不常见的语法:

f1(f2(a, f3(b)), c); 

凡F1-3是计算,和A-C的输入特性。 “链接”是这样的事实,即某些功能的输出被用作其他输入。

这种功能计算代码是单元测试真正发光的地方。测试程序集作为一个整体意味着对f3规范的改变会以某种复杂而无意义的方式改变f2和f1的测试用例。这可能会导致有人将计算结果剪切并粘贴到测试中作为预期结果。哪种让整个练习变得毫无意义。

因此,如果一个测试用例集最小的是一样的东西:

f1(7, -2) => 23 
f2(1, 2) => 7 
f3(4) => 5 

那么你可以通过实现每个这样的测试案例:

  1. 设置的所有属性,以固定大量
  2. 设置输入属性为这种情况下的输入
  3. 检查输出属性

因为第一点是在所有测试之间共享的,所以为每个计算生成测试用例的努力只与该特定计算的复杂度成正比,而不是与属性的总数成正比。