繁体   English   中英

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

[英]When and why should one write parameterized JUnit test cases?

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

因此,我想以此方式补充邓肯的答案。 每当遇到需要测试多个输入值以测试方法的情况时,基本上都有三个选择:1)复制/粘贴。 2)参数化3)理论。

显然复制/粘贴是错误的答案。 理论和参数化都允许使用不同的输入多次运行相同的测试。 通常,如果可以从输入中确定/计算出正确的测试输出,我建议使用“基于参数化的理论”。 这是因为使用“理论”时,可以将@Theory和@Test混合使用,只有“ Theories”将运行多次。 这与Parameterized不同,在Parameterized中,该类中的每个测试将对每个输入运行一次。 因此,如果您有两个测试,一个使用输入,而另一个不使用输入,则两个测试都将执行n次。

理论的另一个优点是可以使用@TestedOn将值直接传递给特定的理论。

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

TestedOn解释

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

我建议使用Parameterized over Theories的唯一一次是难以从输入中计算出预期的输出,因此必须明确提供它。 解决多次运行所有测试问题的一种解决方案是使用封闭运行器,并将所有参数化测试放在一个内部类中,将非参数化测试放在另一个内部类中。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM