Java JUnit测试的标准结构存在吗?每个测试通常需要多少断言?
我将用一个例子更好地解释这一点: 假设我有一个函数,它接收一个X整数数组和一个包含起始位置的额外整数,它计算从该位置开始的数组中10个数字的平均值,但忽略Java JUnit测试的标准结构存在吗?每个测试通常需要多少断言?,java,unit-testing,junit,Java,Unit Testing,Junit,我将用一个例子更好地解释这一点: 假设我有一个函数,它接收一个X整数数组和一个包含起始位置的额外整数,它计算从该位置开始的数组中10个数字的平均值,但忽略0值,并返回-1000000,如果数组从起始位置到结束不包含10个或更多值: public double calculateAverage(ArrayList<Integer>, int startingPosition){ //functionLogic return myAverage; } public双重计
0
值,并返回-1000000
,如果数组从起始位置到结束不包含10个或更多值:
public double calculateAverage(ArrayList<Integer>, int startingPosition){
//functionLogic
return myAverage;
}
public双重计算范围(ArrayList,int startingPosition){
//功能逻辑
返回我的平均值;
}
我不熟悉单元测试,但我建议在这里进行以下测试:
- 以20整数列表和
作为起始位置进行测试。(应将10个数字的平均值从5
返回到5
)14
- 以20整数列表和
作为起始位置进行测试。(应返回15
)-1000000
- 使用9整数列表进行测试。(无论起始位置如何,都应返回
)-1000000
- 使用20整数进行测试,其中一半数字为
,5为起始位置。(应返回0
和5
之间的数字的平均值,不计算14
s)0
- 使用20整数进行测试,其中一半数字为
,15为起始位置。(应返回0
)-1000000
谢谢大家的耐心。相当广泛,但我认为“非正式”共识是绝对限制测试中的断言数量 换句话说:你喜欢很多小测试而不是几个大测试 推理:单元测试的核心思想是帮助您理解(然后修复)失败的根本原因。当您在一个测试方法中有多个断言或“测试”时,您将花费最初的几分钟来了解测试失败的确切位置 将其与只包含两行或三行的测试进行比较(一些设置之后是“执行”,然后是验证/断言步骤)
除此之外,还有很多很好的材料,例如。如果你不想写很多测试方法,你可以选择参数化测试
您将只有一种测试方法,以及一组输入和相应的输出
阅读更多关于参数化测试的信息。这只是一个示例,但实际上我现在有一个500行的类,它有36个单元测试,我甚至没有涵盖100%的代码。这正常吗?听起来。。。很多但这可能有很多原因;例如,您的核心类已经做了太多不同的事情(违反了单一责任原则)。从这个意义上说:你可能把代码放在codereview.stackexchange.com上,看看人们会说些什么。单元测试编码技能,因为任何类型的编码技能只有在您进行审查时才能提高。越多越好。我刚刚看到了编辑和链接,谢谢分享,它给出了一些非常具体的建议,正是我所需要的。谢谢。对于这样的数学问题,可能有更好的测试方法;也许附近有什么能帮上忙的。换句话说:您不需要自己指定输入/输出,而是让运行时搜索“破坏”测试的值。再次感谢您的建议,我也会看一下。