Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit测试的标准结构存在吗?每个测试通常需要多少断言?_Java_Unit Testing_Junit - Fatal编程技术网

Java JUnit测试的标准结构存在吗?每个测试通常需要多少断言?

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双重计

我将用一个例子更好地解释这一点:

假设我有一个函数,它接收一个X整数数组和一个包含起始位置的额外整数,它计算从该位置开始的数组中10个数字的平均值,但忽略
0
值,并返回
-1000000
,如果数组从起始位置到结束不包含10个或更多值:

public double calculateAverage(ArrayList<Integer>, int startingPosition){
    //functionLogic
    return myAverage;
}
public双重计算范围(ArrayList,int startingPosition){
//功能逻辑
返回我的平均值;
}
我不熟悉单元测试,但我建议在这里进行以下测试:

  • 以20整数列表和
    5
    作为起始位置进行测试。(应将10个数字的平均值从
    5
    返回到
    14
  • 以20整数列表和
    15
    作为起始位置进行测试。(应返回
    -1000000
  • 使用9整数列表进行测试。(无论起始位置如何,都应返回
    -1000000
  • 使用20整数进行测试,其中一半数字为
    0
    ,5为起始位置。(应返回
    5
    14
    之间的数字的平均值,不计算
    0
    s)
  • 使用20整数进行测试,其中一半数字为
    0
    ,15为起始位置。(应返回
    -1000000
这些测试可能不够,或者太多,或者只是糟糕的测试,请随意评论任何改进,因为我相信你们中的大多数人比我更了解单一测试

我的问题:

我必须编写5个不同的JUnit测试函数吗?只写1个断言和5个断言是否更好?或者我(比如)以2和3为一组潜水

这里推荐什么款式


谢谢大家的耐心。

相当广泛,但我认为“非正式”共识是绝对限制测试中的断言数量

换句话说:你喜欢很多小测试而不是几个大测试

推理:单元测试的核心思想是帮助您理解(然后修复)失败的根本原因。当您在一个测试方法中有多个断言或“测试”时,您将花费最初的几分钟来了解测试失败的确切位置

将其与只包含两行或三行的测试进行比较(一些设置之后是“执行”,然后是验证/断言步骤)


除此之外,还有很多很好的材料,例如。

如果你不想写很多测试方法,你可以选择参数化测试
您将只有一种测试方法,以及一组输入和相应的输出


阅读更多关于参数化测试的信息。

这只是一个示例,但实际上我现在有一个500行的类,它有36个单元测试,我甚至没有涵盖100%的代码。这正常吗?听起来。。。很多但这可能有很多原因;例如,您的核心类已经做了太多不同的事情(违反了单一责任原则)。从这个意义上说:你可能把代码放在codereview.stackexchange.com上,看看人们会说些什么。单元测试编码技能,因为任何类型的编码技能只有在您进行审查时才能提高。越多越好。我刚刚看到了编辑和链接,谢谢分享,它给出了一些非常具体的建议,正是我所需要的。谢谢。对于这样的数学问题,可能有更好的测试方法;也许附近有什么能帮上忙的。换句话说:您不需要自己指定输入/输出,而是让运行时搜索“破坏”测试的值。再次感谢您的建议,我也会看一下。