我将通过一个例子更好地解释这个:
想象一下,我有一个函数接收一个X整数数组和一个包含起始位置的额外整数,它计算从该位置开始的数组中10个数字的平均值,但忽略0
个值和如果数组从起始位置到结尾不包含10个或更多值,则返回-1000000
:
public double calculateAverage(ArrayList<Integer>, int startingPosition){
//functionLogic
return myAverage;
}
我是单元测试的新手,但我建议在这里进行以下测试:
5
作为起始位置进行测试。 (应将10个数字的平均值从5
返回到14
)15
作为起始位置进行测试。 (应该返回-1000000
)-1000000
,无论起始位置)0
,5为起始位置。 (应该返回5
和14
之间的平均值而不计算0
s。)0
,15为起始位置。 (应该返回-1000000
)这些测试可能不够,或者太多,或者只是测试不好,请随时评论任何改进,因为我相信你们大多数人对单一测试比我更了解
我的问题:
我是否必须编写5种不同的JUnit测试函数?用5个断言只写1个更好吗?或者我以2和3组的形式潜水(例如)?
这里推荐的风格是什么?
感谢大家的耐心等待。
答案 0 :(得分:4)
相当广泛,但我认为“非正式”的共识是绝对限制测试中断言的数量。
换句话说:你更喜欢许多小测试而不是几次大测试。
推理:单元测试的核心思想是帮助您理解(然后修复)失败的根本原因。如果您在一种测试方法中有多个断言或“测试”,那么您将花费您的第一分钟来了解测试失败的确切位置。
将其与仅包含两行或三行的测试进行比较(某些设置后跟“执行”,然后是验证/断言步骤)。
除此之外:那里有很多好的材料,例如javacodegeeks。
答案 1 :(得分:2)
如果您不想编写大量测试方法,可以选择参数化测试。
您将只有一种测试方法,一组输入和相应的输出。
在parameterized tests in action了解有关参数化测试的更多信息。