JUnit5详解 常用注解 BeforeEach BeforeAll ParameterizedTest RepeatedTest

  • 一、前言
    • 1. 引入test包
  • 二、注解
  • 三、测试案例
    • 1. @BeforeAll、@AfterAll、@BeforeEach、@AfterEach
    • 2. @ParameterizedTest
    • 3. @RepeatedTest

一、前言

前几个月我跳槽,入职了一家软件外包公司。虽然薪资很低,但好在不用加班。项目是个外国的,给我最大的感觉就是老外很重视UT,覆盖率要80%以上。所以开发工作中写UT也是很重要的工作。

由于我之前待过的几家公司是民企,对UT并不重视,而且我个人也没有特地学UT。虽然从大学就接触JUnit了,但是只停留在会用@Test这个水平,现在是时候学习下JUnit了。因为目前新的SpringBoot用的JUnit5,所以直接看JUnit5,JUnit4和JUnit5有不少差异。

当然UT工具不仅仅是JUnit,SpringBoot还集成了mockito、hamcrest等工具。

1. 引入test包

现在的项目基本使用SpringBoot,所以直接引入spring-boot-starter-test,

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

二、注解

注解 说明
@SpringBootTest SpringBoot的注解,修饰在类上,程序会找到@SpringBootApplication修饰的主启动类,创建ApplicationContext容器。
@ExtendWith (1)当你测试类用到Spring时:
Spring boot 2.1.x之前,@SpringBootTest 需要配合@ExtendWith(SpringExtension.class)才能正常工作的。
Spring Boot 2.1.x之后,@SpringBootTest里包含了@ExtendWith(SpringExtension.class),就无需再加@ExtendWith注解。
(2)当你测试类不用Spring时:
如果您只想涉及Mockito而不必涉及Spring,那么当您只想使用@Mock、@InjectMocks注解时,您就得使用@ExtendWith(MockitoExtension.class),因为它不会加载到很多不需要的Spring东西中。
@Test 修饰在方法上,表示这个方法是一个测试方法
@ParameterizedTest 修饰在方法上,进行参数化测试。对同一个测试方法,可以有多种入参对其测试,要定义一个参数源。
@RepeatedTest 修饰在方法上,表示会自动重复测试这个方法,比如@RepeatedTest(10),会自动执行10次。
@DisplayName 修饰在类或者方法上,指定测试方法的展示名称
@DisplayNameGeneration 修饰在类上,展示名称生成器。设置一定规则生成方法的展示名称。
例如:方法if_it_is_zero()展示出的名字为if it is zero,去掉了其中的下划线。
@BeforeEach 修饰在方法上,在每一个测试方法(所有@Test、@RepeatedTest、@ParameterizedTest或者@TestFactory注解的方法)之前执行一次。
例如:一个测试类有2个测试方法testA()和testB(),还有一个@BeforeEach的方法,执行这个测试类,@BeforeEach的方法会在testA()之前执行一次,在testB()之前又执行一次。@BeforeEach的方法一共执行了2次。
@AfterEach 修饰在方法上,和@BeforeEach对应,在每一个测试方法(所有@Test、@RepeatedTest、@ParameterizedTest或者@TestFactory注解的方法)之后执行一次。
@BeforeAll 修饰在方法上,使用该注解的方法在当前整个测试类中所有的测试方法之前执行,每个测试类运行时只会执行一次。
@AfterAll 修饰在方法上,与@BeforeAll对应,使用该注解的方法在当前测试类中所有测试方法都执行完毕后执行的,每个测试类运行时只会执行一次。
@Nested 使用了这个注解的测试类表示这是一个嵌套的测试类,什么是嵌套测试类呢通俗的说就是在测试类中嵌套一个非静态的测试类(即内部类),并且可以嵌套多层。
@Tag 修饰在类名或方法上,通过 @Tag 对测试类和方法进行打标签。
例如打上product表示只在生产环境执行。
@Disabled 修饰在类名或方法上,表示不用执行它。
@Timeout 修饰方法上,表示超过多少时间,方法还没有执行完,就判定测试失败。

三、测试案例

1. @BeforeAll、@AfterAll、@BeforeEach、@AfterEach

@ExtendWith(MockitoExtension.class)
public class DictTypeControllerTest {@BeforeAllstatic void testBeforeAll() {System.out.println("BeforeAll");}@BeforeEachvoid testBeforeEach() {System.out.println("BeforeEach");}@AfterEachvoid testAfterEach() {System.out.println("AfterEach");}@Test@DisplayName("方法A")void testA() {System.out.println("testA");}@Test@DisplayName("方法B")void testB() {System.out.println("testB");}@Test@DisplayName("方法C")@Disabledvoid testC() {System.out.println("testC");}@AfterAllstatic void testAfterAll() {System.out.println("AfterAll");}
}

2. @ParameterizedTest

@ExtendWith(MockitoExtension.class)
public class ParameterizedAnnoTest {@ParameterizedTest@MethodSource("getParams")void testAdd(int a, int b) {System.out.println(a + b);}private static Stream<Arguments> getParams() {return Stream.of(Arguments.of(1, 2),Arguments.of(3, 2));}
}

3. @RepeatedTest

@ExtendWith(MockitoExtension.class)
public class RepeatedAnnoTest {@RepeatedTest(3)@DisplayName("方法A")void testA() {System.out.println("testA");}
}

结果显示执行了3次

testA
testA
testA

如果@Test和@RepeatedTest(3)同时都修饰了方法,那么会叠加,总执行4次。

@ExtendWith(MockitoExtension.class)
public class RepeatedAnnoTest {//这里多了个@Test@Test@RepeatedTest(3)@DisplayName("方法A")void testA() {System.out.println("testA");}
}

结果显示执行了4次

testA
testA
testA
testA

SpringBoot教程(13) JUnit5详解 常用注解 BeforeEach BeforeAll ParameterizedTest RepeatedTest相关推荐

  1. SpringBoot教程(14) JUnit5详解 断言 assertEquals assertSame assertThrows assertThat

    一.前言 断言,简单理解就是用来判断的语句.判断待测试的代码的结果和我们期望的结果是否一致.如果不一致,则说明这个UT失败了. 我们最最常见的断言就是assertEquals,判断值是否相等.JUni ...

  2. java注解 源码_详解Java注解教程及自定义注解

    详解Java注解教程及自定义注解 更新时间:2016-02-26 11:47:06   作者:佚名   我要评论(0) Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个 ...

  3. SpringBoot (6)---RestTemplate方法详解(2)

    SpringBoot (6)---RestTemplate方法详解(2) 说明 上一篇SpringBoot 2.1 | 第三篇:RestTemplate请求HTTP(1)简单运用了RestTempla ...

  4. [Dreamweaver教程]Meta标签详解

    [Dreamweaver教程]Meta标签详解 原作者:indian 出处:5D多媒体 发表时间:2004-12-8 关键词: 版权信息:传统媒体及商业网站禁止擅自转载:个人网站转载需经作者同意,并注 ...

  5. Springboot@Configuration和@Bean详解

    Springboot@Configuration和@Bean详解 一.@Configuration @Target({ElementType.TYPE}) @Retention(RetentionPo ...

  6. springMVC详解以及注解说明

    springMVC详解以及注解说明 基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置 Bean.装配 Bean 的功能,您可以使用基 ...

  7. java的注解方式_详解Java注解的实现与使用方法

    详解Java注解的实现与使用方法 Java注解是java5版本发布的,其作用就是节省配置文件,增强代码可读性.在如今各种框架及开发中非常常见,特此说明一下. 如何创建一个注解 每一个自定义的注解都由四 ...

  8. cs6导航栏代码html,总算认识网页设计教程|Dreamweaver-CS6工具栏详解

    总算认识网页设计教程|Dreamweaver-CS6工具栏详解 日期:2019-08-31 16:18:59 浏览:194 核心提示:网页设计教程|DreamweaverCS6工具栏详解.为了更好地使 ...

  9. JVM调优系列--Java命令选项(参数)--大全/详解/常用

    原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明        本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...

最新文章

  1. 添加绿色版UltraEdit到右键菜单
  2. 【Luogu】P3356火星探险问题(费用流)
  3. Linux下MySql数据库常用操作
  4. 《程序是怎么跑起来的》第六章
  5. 卸载 PyCharm!这才是 Python 小白的最理想的 IDE
  6. 工作179:接口对接
  7. 为Raspberry Pi开发.NET应用程序:第2部分
  8. docker安装消息队列延时插件
  9. python 状态机_Python 状态机
  10. Python利用openpyxl来操作Excel(一)
  11. spring作用域单例和global_面试必备 | 69道Spring面试题
  12. 安装软件提示需要重启电脑的处理方法
  13. c语言——实现简单扫雷小游戏
  14. 【蓝桥杯练习--递归】费解的开关
  15. 接上篇手工课 材料:美女图片一张, 要求将其制成 边旋转边渐隐的魔幻图片
  16. #Visio#教会你怎么安装和使用 Visio 哦 ~ ~
  17. IOS高级开发~开机启动无限后台运行监听进程
  18. css样式写一个公告通知
  19. Android系统应用
  20. 应用启动失败,因为没有QT平台可以初始化

热门文章

  1. 3.1 Fragment理论知识及其生命周期,看这一片就够了
  2. 单片机在目前的发展趋势
  3. 【ffmpeg 给视频添加背景音乐,去掉视频背景音乐原声】
  4. 打印十字图-Java
  5. 深度学习之人体姿态估计在医疗领域的作用
  6. Windows10自带的录屏软件,十分强大
  7. MySQL学习Day01(狂神说Java)
  8. python设计拼图游戏tkinter_tkinter做一个拼图游戏
  9. 按键修饰符、系统修饰符、鼠标修饰符
  10. Simple DNSCrypt