是否存在JUnit测试的标准结构?通常会优先考虑每次测试多少个断言?

时间:2017-01-19 07:57:38

标签: java unit-testing junit

我将通过一个例子更好地解释这个:

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

public double calculateAverage(ArrayList<Integer>, int startingPosition){
    //functionLogic
    return myAverage;
}

我是单元测试的新手,但我建议在这里进行以下测试:

  • 使用20个整数列表和5作为起始位置进行测试。 (应将10个数字的平均值从5返回到14
  • 使用20个整数列表和15作为起始位置进行测试。 (应该返回-1000000
  • 使用9整数列表进行测试。 (应该返回-1000000,无论起始位置)
  • 使用20整数进行测试,其中一半数字为0,5为起始位置。 (应该返回514之间的平均值而不计算0 s。)
  • 使用20整数进行测试,其中一半数字为0,15为起始位置。 (应该返回-1000000

这些测试可能不够,或者太多,或者只是测试不好,请随时评论任何改进,因为我相信你们大多数人对单一测试比我更了解

我的问题:

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

这里推荐的风格是什么?

感谢大家的耐心等待。

2 个答案:

答案 0 :(得分:4)

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

换句话说:你更喜欢许多小测试而不是几次大测试。

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

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

除此之外:那里有很多好的材料,例如javacodegeeks

答案 1 :(得分:2)

如果您不想编写大量测试方法,可以选择参数化测试
您将只有一种测试方法,一组输入和相应的输出。

parameterized tests in action了解有关参数化测试的更多信息。

相关问题