何时以及为什么要编写参数化的JUnit测试用例?

时间:2014-03-18 09:34:58

标签: unit-testing junit parameterized

有人可以解释为什么以及何时编写参数化测试用例?

2 个答案:

答案 0 :(得分:3)

所以,我想以这种方式补充Duncan的答案。每当您想要测试多个输入值以测试方法时,您基本上有三个选项:1)复制/粘贴。 2)参数化3)理论。

显然复制/粘贴是错误的答案。理论和参数化都允许使用不同的输入多次运行相同的测试。一般情况下,如果可以根据输入确定/计算测试的正确输出,我建议使用Theories over Parameterized。这是因为在使用Theories时,你可以混合@Theory和@Test,只有Theories会被多次运行。这与参数化不同,其中每个输入都会运行一次类中的每个测试。因此,如果您有两个测试,一个使用输入,另一个不使用,两个都执行n次。

理论的另一个优点是能够使用@TestedOn将值传递给特定理论。

 @Theory
 public void theoryTest(@TestedOn(ints={-1,0,1,2,55} int input){...}

TestedOn explained

我有一个包含@TestOn的GitHub项目,允许使用整数,布尔值,字符串等。

我建议使用参数化理论的唯一时间是从输入计算预期输出并不容易,因此必须明确提供。解决多次运行所有测试的问题的一个解决方案是使用Enclosed runner并将所有参数化测试放在一个内部类中,将非参数化测试放在另一个内部类中。

答案 1 :(得分:1)

参数化测试用于需要使用大量不同输入值执行完全相同测试的情况。

一个很好的例子可能是测试一段执行计算的代码,其中有大量已知正确的答案,你想测试。