一、简介
JUnit4引入了Theory(理论)机制,在JUnit的官方介绍上(https://github.com/junit-team/junit/wiki/Theories)看了半天,发现其实这个概念类似于参数化测试。在参数化测试中,我们需要给定所有具体的测试数据组,而在理论测试中,用户只需给定了一些数据,JUnit自动利用这些数据组合出各种各种可能的组合来执行测试。
二、使用
要执行Theory测试,必须要使用org.junit.experimental.theories.Theories这个Test Runner。
@RunWith(Theories.class) public class TheoryTest { //允许的最大误差 private static final double DELTA = 0.01; @DataPoint public static int ZERO = 0; @DataPoint public static int TWO = 2; @DataPoint public static int EIGHT = 8; //标志这个测试为Theory测试 @Theory public void testDivide(int dividend, int divisor) { //跳过除数为0的case assumeThat(divisor, not(0)); //Calculator.divide(dividend, divisor)方法返回他们相除的结果 assertEquals(dividend / divisor, Calculator.divide(dividend, divisor), DELTA); System.out.println("Passed with: dividend=" + dividend + ", divisor=" + divisor); } }
在上面的测试中,@DataPoint用于注解静态变量,表示这个变量是个数据点。当执行testDivide这个Theory测试时,JUnit会把所有的DataPoint数据两两组合(JUnit会根据测试方法的参数决定数据的组合)形成一组组的测试数据(也就是9组)并用这些数据分别执行测试。执行上面的测试会输出以下信息:
Passed with: dividend=0, divisor=2 Passed with: dividend=0, divisor=8 Passed with: dividend=2, divisor=2 Passed with: dividend=2, divisor=8 Passed with: dividend=8, divisor=2 Passed with: dividend=8, divisor=8
也可以使用@DataPoints注解一个静态方法以返回数据,下面的测试与上面的等价
@RunWith(Theories.class) public class TheoryTest { //允许的最大误差 private static final double DELTA = 0.01; @DataPoints public static int[] getTestData() { return new int[]{0, 2, 8}; } //标志这个测试为Theory测试 @Theory public void testDivide(Integer dividend, Integer divisor) { //跳过除数为0的case assumeThat(divisor, not(0)); //Calculator.divide(dividend, divisor)方法返回他们相除的结果 assertEquals(dividend / divisor, Calculator.divide(dividend, divisor), DELTA); System.out.println("Passed with: dividend=" + dividend + ", divisor=" + divisor); } }
上面两个例子都是方法的两个参数分别遍历DataPoint进行组合,如果需要限定某个参数,可以像下面的例子一样使用@TestOn注解:
@RunWith(Theories.class) public class TheoryTest { //允许的最大误差 private static final double DELTA = 0.01; //标志这个测试为Theory测试 @Theory public void testDivide( @TestedOn(ints = {0, 2, 8}) int dividend, @TestedOn(ints = {2, 8}) int divisor ) { //Calculator.divide(dividend, divisor)方法返回他们相除的结果 assertEquals(dividend / divisor, Calculator.divide(dividend, divisor), DELTA); System.out.println("Passed with: dividend=" + dividend + ", divisor=" + divisor); } }
这样,JUnit就只会使用给定的数据进行组合测试,去掉了除数为0的情况,也就不必要对除数进行假设(assume)了。
相关推荐
junit4单元测试报错:method initializationerror not found 缺少jar包导致,总共需要三个jar包:junit-4.11.jar,hamcrest-core-1.3.rc2.jar,hamcrest-library-1.3.rc2.jar,都在压缩包里了。
Junit学习笔记,希望有用~~~~~~~~~~~~~~~~~~~~~~
JUnit是一款由Erich Gamma(《设计模式》的作者)和Kent Beck(极限编程的提出者)编写的开源的回归测试框架,供Java编码人员做单元测试之用。当前版本4.1,可以从www.junit.org网站上获得。与早期的JUnit 3相比,...
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。 先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。元数据是什么?元数据就是描述数据的数据。也...
junit4学习文档,有实例,非常详细,不懂的可以参考
JUnit 4所需system-rules.jar依赖包,主要包含:system-rules-1.16.1.jar,system-rules-1.17.1.jar,system-rules-1.18.0.jar
赠送jar包:junit-jupiter-engine-5.8.2.jar; 赠送原API文档:junit-jupiter-engine-5.8.2-javadoc.jar; 赠送源代码:junit-jupiter-engine-5.8.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-engine-...
这是一个junit4测试的jar包,copy进去就可用
以一个简单的DEMO介绍如何在Eclipse下使用JUnit4。供初次接触JUnit的同学学习
本人小白,开始学习Android,记录自己的错误瞬间,大神不要喷我,哈哈! 安装好android studio后,测试并创建了一个HelloWord project,按照提示一步一步设置完成后,发现要下载一些gradle resource,结果下载了一夜...
junit-vintage-engine-5.6.2.jarjunit-vintage-engine-5.6.2.jarjunit-vintage-engine-5.6.2.jar
junit4测试源码,看浪曦JUNIT4笔记
Junit4单元测试个人笔记Junit4单元测试个人笔记Junit4单元测试个人笔记
Junit学习笔记和课件,欢迎学习爱好者下载资源,共同学习。。
现在的版本都4.3.1,3.8.1的感觉好象不好找,虽然www.junit.org能够找到,但对我们这种英语不好的来说,还是不好找,再说了,现在好多的教程都是以3.8.1来写的,所以在这里把我找到的3.8.1传上来供大家以后下载 博文链接:...
Myeclipse中的JUnit测试详细
赠送jar包:junit-jupiter-api-5.5.2.jar; 赠送原API文档:junit-jupiter-api-5.5.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.5.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.5.2.pom; ...
赠送jar包:junit-jupiter-engine-5.8.0-M1.jar; 赠送原API文档:junit-jupiter-engine-5.8.0-M1-javadoc.jar; 赠送源代码:junit-jupiter-engine-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-...
junit3 junit4 api,单元测试的利器
赠送jar包:junit-jupiter-api-5.4.2.jar; 赠送原API文档:junit-jupiter-api-5.4.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.4.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.4.2.pom; ...