目录

1. JUnit4.x 测试用例相关的注解

1.1 @Before

1.2 @After

1.3 @BeforeClass

1.4 @AfterClass

1.5 @Test(timeout = xxx)

1.6 @Test(expected = Exception.class)

1.7 @Ignore

2. 打包测试Suite相关的注解

2.1 @RunWith(Suite.class)

2.2 @Suite.SuiteClasses(...{xx.calss, xx.calss, ...})

2.3 示例

3. 参数化测试相关的注解

3.1 @RunWith(Parameterized.class)

3.2 @Parameters

3.3 示例

4. 控制用例执行顺序相关的注解

4.1 @FixMethodOrder注解

4.2 示例

5. 自定义规则Rule相关的注解

5.1 @Rule和@ClassRule

5.2 JUnit提供了以下几个Rule实现,必要时也可以自己实现Rule

5.3 示例

1. JUnit4.x 测试用例相关的注解

1.1 @Before

与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行。

1.2 @After

与tearDown()方法一样。

1.3 @BeforeClass

在所有方法执行之前执行

1.4 @AfterClass

在所有方法执行之后执行

1.5 @Test(timeout = xxx)

设置当前测试方法在一定时间内运行完,否则返回错误

1.6 @Test(expected = Exception.class)

设置被测试的方法是否有异常抛出。抛出异常类型为: Exception.class

1.7 @Ignore

注释掉一个测试方法或者一个类,被注释的方法或类,不会被执行。

补充:

JUnite4的执行顺序:@BeforeClass > @Before > @Test1 > @After > @Before > @Test2 > @After ...... > @AfterClass

2. 打包测试Suite相关的注解

2.1 @RunWith(Suite.class)

需要一个特殊的Runner, 因此需要向@RunWith注解传递一个参数Suite.calss。

2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})

用来表明这个类是一个打包测试类,把需要打包的类作为参数传递给该注解即可。

小结:

有了这两个注解之后,就已经完整的表达了所有的含义,因此下面的类无关紧要,随便起个类名,内容为空。

2.3 示例

3. 参数化测试相关的注解

3.1 @RunWith(Parameterized.class)

首先要为这种测试专门生成一个新的类,而不能与其他测试共用同一个类。

这里不使用默认的Runner了,使用带有参数化功能的Runner。

@RunWith(Parameterized.class)这条语句就是为这个类指定了ParameterizedRunner。

3.2 @Parameters

放在方法上。

定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。

定义测试数据的结合,就是下方的prepareData()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。

这里需要注意:其中的数据是一个二维数组,数据两两一组,每组中的这两个数据,一个是参数,一个是预期的结果。比如第一组{2,4}中:2是参数,4是预期结果。这两数据顺序无所谓。

然后,是构造函数,其功能就是对先前定义的两个参数进行初始化。这里要注意参数的顺序,要和上面的数据集合的顺序保持一致。(比如都是先参数后结果)

3.3 示例

package com.my.junit4.demo;import static org.junit.Assert.*;import java.util.Arrays;
import java.util.Collection;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;//这里不能使用默认的Runner了,特殊功能要用特殊Runner
@RunWith(Parameterized.class)
public class MyJUnit4ParaTest {private int input1; private int input2; private int expected; //参数化,方法的名字可随意取,但是这个结构基本是固定的,这么使用就行。//有时参数不是直接赋值,而是从一个文件中读出,也是类似的格式,返回Collection<Object[]>@Parameters public static Collection<Object[]> prepareData(){ Object [][] object = {{3,1,3},{36,6,6},{0,4,7}}; return Arrays.asList(object); }    //构造方法public MyJUnit4ParaTest(int input1,int input2,int expected){ this.input1 = input1; this.input2 = input2; this.expected = expected; }   //测试方法@Test public void testDiv(){ Calc calc = new Calc(); int result = calc.div(input1,input2);   //input1,input2,expected分别对应二维数组元素的第一个,第二个和第三个元素assertEquals(expected,result); } }

4. 控制用例执行顺序相关的注解

4.1 @FixMethodOrder注解

(1)控制测试方法的执行顺序的。

(2)该注解的参数是org.junit.runners.MethodSorters对象。

(3)枚举类org.junit.runners.MethodSorters中定义三种顺序类型:

MethodSorters.JVM:按照JVM得到的方法顺序,即代码中定义的方法顺序。

MethodSorters.DEFAULT:默认的顺序,以确定但不可预期的顺序执行。

MethodSorters.NAME_ASCENDING:按方法名字母顺序执行。

4.2 示例

5. 自定义规则Rule相关的注解

5.1 @Rule和@ClassRule

(1) 什么是Rule实现

Rule是一组实现了TestRule接口的共享类,提供了验证,监视TestCase和外部资源管理等能力。

即,提供了测试用例执行过程中一些通用功能的共享能力,使不必重复编写一些功能类似的代码。

(2)JUnit4中包含两个注解:@Rule和@ClassRule

用于修饰Field或返回Rule的Method。

两者作用域不同:

@Rule的作用域是测试方法。

@ClassRule则是测试Class。

5.2 JUnit提供了以下几个Rule实现,必要时也可以自己实现Rule

(1)Verifier:验证测试执行结果的正确性。

(2)ErrorCollector:收集测试方法中出现的错误信息,测试不会中断,如果有错误发生,测试结束后会标记失败。

(3)ExpectedException:提供灵活的异常验证功能。

(4)Timeout:用于测试超时的Rule。

(5)ExternalResource:外部资源管理。

(6)TemporaryFolder:在JUnit的测试执行前后,创建和删除新的临时目录。

(6)TestWatcher:监视测试方法生命周期的各个阶段。

(7)TestName:在测试方法执行过程中提供获取测试名字的能力。

5.3 示例

package com.my.junit4.demo;import static org.junit.Assert.*;import java.util.Arrays;import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;//实现MethodRule接口
public class MyJUnit4RepeatableRule implements MethodRule{int times=1;String[] testMethods = null;//构造方法MyJUnit4RepeatableRule(int times, String[] testMethods){this.times = times;this.testMethods = testMethods;}//重写规则@Overridepublic Statement apply(final Statement base, final FrameworkMethod method, Object target) {return new Statement() { //匿名方法@Overridepublic void evaluate() throws Throwable {int loopTime = 1;if(Arrays.asList(testMethods).contains(method.getName())){loopTime = times;}  for(int i=0;i<loopTime;i++)base.evaluate();}};}
}
package com.my.junit4.demo;import static org.junit.Assert.*;import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.MethodRule;public class RepeatableRuleTest {//引入自定义的规则@Rulepublic MethodRule rule = new MyJUnit4RepeatableRule(5, new String[]{"test1"});@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}@Testpublic void test() {//assertTrue(false); //一旦断言失败,断言后的代码就不会再执行System.out.println("test");}@Testpublic void test1() {System.out.println("test1");}}

JUnit4的一些常用注解相关推荐

  1. JUnit4 与 JUnit 5 常用注解对比

    JUnit4 与 JUnit 5 常用注解对比 JUnit4 JUnit5 说明 @Test @Test 表示该方法是一个测试方法.JUnit5与JUnit 4的@Test注解不同的是,它没有声明任何 ...

  2. Spring系列之Spring常用注解总结

    参看博客:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺 ...

  3. Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...

  4. spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?

    作者:平凡希http://cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 如 ...

  5. Junit测试常用注解

    Junit常用注解 0x01 摘要 本文简要说下junit里面常用注解的含义和使用,还会总结一些常用的Assert判断语句. 0x02 常用Junit注解 2.1 @Test 用在方法上,定义该方法是 ...

  6. SpringBoot教程(13) JUnit5详解 常用注解 BeforeEach BeforeAll ParameterizedTest RepeatedTest

    JUnit5详解 常用注解 BeforeEach BeforeAll ParameterizedTest RepeatedTest 一.前言 1. 引入test包 二.注解 三.测试案例 1. @Be ...

  7. Spring系列之Spring常用注解总结 原文:https://www.cnblogs.com/xiaoxi/p/5935009.html

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...

  8. Spring 常用注解(IOC/AOP/MVC)

    ① 注解 和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作. 本质上:所有一切的操作都是 ...

  9. 七、springboot 单元测试阶段 (2、JUnit5常用注解,3、断言(assertions) )

    2.JUnit5常用注解 JUnit5的注解与JUnit4的注解有所变化 JUnit 5 User Guide @Test :表示方法是测试方法.但是与JUnit4的@Test不同,他的职责非常单一不 ...

最新文章

  1. php url 删除参数错误,为什么在通过改型2按id删除数据时会出现IllegalArgumentException错误?以及如何修复它...
  2. win2k cannot set the docm proportites
  3. 【Web安全】JSP内存马研究
  4. 武汉大学计算机学院毕业合影,武大校长对毕业合影有求必应
  5. 视频营销:影响视频排名的五个重要因素
  6. SQL Server时间粒度系列----第4节季、年时间粒度详解
  7. python编程软件哪个好-来 看看谁最适合学Python编程
  8. 软件测试管理知识总结
  9. 雅虎前端性能优化的35条军规
  10. Feed流之微博系统设计
  11. WMT 2022国际机器翻译大赛发榜,微信翻译斩获三项任务冠军
  12. fedora11 文泉驿micro-hei字体设置
  13. 使用opencv创建一张纯黑色的图片与其他图片进行合成
  14. 深度解析Java游戏服务器开发
  15. Java okhttp 实现对有道翻译的爬取
  16. 水题挑战3:NOIP 2017 宝藏
  17. DaoCloud Rest API 体验
  18. 曾经的小孩在努力奔跑!
  19. vue入门(猴子都能学会)
  20. Ta-lib学习笔记01--成交量指标

热门文章

  1. 2020年加密货币领域的5大做市商,都有谁?
  2. javascript条件语句if else用法
  3. EN55024、IEC61000 EMC Surge浪涌标准
  4. MFC之 MapWinGis叠加必应瓦片地图
  5. HighCharts 嵌套仪表盘
  6. 浅论农村产业结构合理化
  7. c语言100行程序代码带解释,【申精】掉字母游戏VC源代码,共100行,带注释(加绘图库写的)...
  8. SQL编程之生日问题
  9. 适合利用计算机模拟的是,计算机模拟在数学建模中的应用-海南大学.PDF
  10. 达观财务报表解析与核查系统助力金融企业财报管理变革