我有一个用作财务应用程序一部分的类。该类绑定到UI表单并接受一些值,然后用于计算财务数据。计算值显示为对象的属性。其中一些计算使用其他计算。
例如,CalculationA可能会返回PropertyA + PropertyB。 CalculationB返回PropertyC - CalculationA。 (这是极端过度简化)。
我正在尝试编写一些单元测试,以确保正确执行这些计算,并想知道我应该采取什么方法。
我的第一种方法是手动重新计算测试方法中的预期结果。例如,在测试CalculationB时,我填充测试对象,然后将预期结果设置为等于PropertyC - PropertyA + PropertyB。但由于真实对象涉及25个属性,这非常麻烦。
我想到的选项是简单地创建测试对象,用值填充它然后编写一个测试,验证CalculationA等于PropertyA + PropertyB,另一个测试验证CalculationB等于PropertyC - CalculationB。后者假设CalculationB是正确的,但这对单元测试的目的是否真的重要?
您可以为设置我的测试提供哪些指导/建议,使其准确,可靠和可维护?确保计算正确并且我没有意外设置CalculationB = PropertyB - CalculationA的最佳方法是什么。
答案 0 :(得分: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
然后您可以通过以下方式实现每个测试用例:
由于第一点在所有测试之间共享,因此为每个计算生成测试用例的工作量仅与特定计算的复杂性成比例,而不是与属性总数成比例。