当前位置:   article > 正文

JUnit5学习之一:基本操作_junit5 runwith

junit5 runwith
  1. 对于上面的RunWith注解,JUnit5官方文档的说法如下图红框所示,已经被ExtendWith取代:

在这里插入图片描述

  1. 咱们再来看看SpringBootTest注解,如下图,可见已经包含了ExtendWith:

在这里插入图片描述

  1. 综上所述,SpringBoot+JUnit5时,RunWith注解已经不需要了,正常情况下仅SpringBootTest注解即可,如果对扩展性有更多需求,可以添加ExtendWith注解,如下图:

在这里插入图片描述

常用的JUnit5注解(SpringBoot环境)

注意,接下来提到的测试方法,是指当前class中所有被@Test、@RepeatedTest、@ParameterizedTest、@TestFactory修饰的方法;

  1. ExtendWith:这是用来取代旧版本中的RunWith注解,不过在SpringBoot环境如果没有特别要求无需额外配置,因为SpringBootTest中已经有了;

  2. Test:被该注解修饰的就是测试方法;

  3. BeforeAll:被该注解修饰的必须是静态方法,会在所有测试方法之前执行,会被子类继承,取代低版本的BeforeClass;

  4. AfterAll:被该注解修饰的必须是静态方法,会在所有测试方法执行之后才被执行,会被子类继承,取代低版本的AfterClass;

  5. BeforeEach:被该注解修饰的方法会在每个测试方法执行前被执行一次,会被子类继承,取代低版本的Before;

  6. AfterEach:被该注解修饰的方法会在每个测试方法执行后被执行一次,会被子类继承,取代低版本的Before;

  7. DisplayName:测试方法的展现名称,在测试框架中展示,支持emoji;

  8. Timeout:超时时长,被修饰的方法如果超时则会导致测试不通过;

  9. Disabled:不执行的测试方法;

5版本已废弃的注解

以下的注解都是在5之前的版本使用的,现在已经被废弃:

| 被废弃的注解 | 新的继任者 |

| — | — |

| Before | BeforeEach |

| After | AfterEach |

| BeforeClass | BeforeAll |

| AfterClass | AfterAll |

| Category | Tag |

| RunWith | ExtendWith |

| Rule | ExtendWith |

| ClassRule | RegisterExtension |

版本和环境信息

整个系列的编码和执行在以下环境进行,供您参考:

  1. 硬件配置:处理器i5-8400,内存32G,硬盘128G SSD + 500G HDD

  2. 操作系统:Windows10家庭中文版

  3. IDEA:2020.2.2 (Ultimate Edition)

  4. JDK:1.8.0_181

  5. SpringBoot:2.3.4.RELEASE

  6. JUnit Jupiter:5.6.2

接下来开始实战,咱们先建好SpringBoot项目;

关于lombok

为了简化代码,项目中使用了lombok,请您在IDEA中安装lombok插件;

源码下载

  1. 如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

  1. 这个git项目中有多个文件夹,本章的应用在junitpractice文件夹下,如下图红框所示:

在这里插入图片描述

  1. junitpractice是父子结构的工程,本篇的代码在junit5experience子工程中,如下图:

在这里插入图片描述

创建Maven父工程

  1. 为了便于管理整个系列的源码,在此建立名为junitpractice的maven工程,后续所有实战的源码都作为junitpractice的子工程;

  2. junitpractice的pom.xml如下,可见是以SpringBoot的2.3.4.RELEASE版本作为其父工程:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

simplebean

org.springframework.boot

spring-boot-starter-parent

2.3.4.RELEASE

com.bolingcavalry

junitpractice

1.0-SNAPSHOT

pom

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

org.projectlombok

lombok

1.16.16

本篇的源码工程

接下来咱们准备一个简单的SpringBoot工程用于做单元测试,该工程有service和controller层,包含一些简单的接口和类;

  1. 创建名为junit5experience的子工程,pom.xml如下,注意单元测试要依赖spring-boot-starter-test:
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

com.bolingcavalry

junitpractice

1.0-SNAPSHOT

…/pom.xml

com.bolingcavalry

junit5experience

0.0.1-SNAPSHOT

junit5experience

Demo project for simplebean in Spring Boot junit5

<java.version>1.8</java.version>

org.springframework.boot

spring-boot-starter-web

org.projectlombok

lombok

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-webflux

test

org.springframework.boot

spring-boot-maven-plugin

  1. 写一些最简单的业务代码,首先是service层的接口HelloService.java:

package com.bolingcavalry.junit5experience.service;

public interface HelloService {

String hello(String name);

int increase(int value);

/**

  • 该方法会等待1秒后返回true,这是在模拟一个耗时的远程调用

  • @return

*/

boolean remoteRequest();

}

  1. 上述接口对应的实现类如下,hello和increase方法分别返回String型和int型,remoteRequest故意sleep了1秒钟,用来测试Timeout注解的效果:

package com.bolingcavalry.junit5experience.service.impl;

import com.bolingcavalry.junit5experience.service.HelloService;

import org.springframework.stereotype.Service;

@Service()

public class HelloServiceImpl implements HelloService {

@Override

public String hello(String name) {

return "Hello " + name;

}

@Override

public int increase(int value) {

return value + 1;

}

@Override

public boolean remoteRequest() {

try {

Thread.sleep(1000);

} catch (InterruptedException interruptedException) {

interruptedException.printStackTrace();

}

return true;

}

}

  1. 添加一个简单的controller:

package com.bolingcavalry.junit5experience.controller;

import com.bolingcavalry.junit5experience.service.HelloService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@Autowired

private HelloService helloService;

@RequestMapping(value = “/{name}”, method = RequestMethod.GET)

public String hello(@PathVariable String name){

return helloService.hello(name);

}

}

  1. 启动类:

package com.bolingcavalry.junit5experience;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class Junit5ExperienceApplication {

public static void main(String[] args) {

SpringApplication.run(Junit5ExperienceApplication.class, args);

}

}

  • 以上就是一个典型的web工程,接下来一起为该工程编写单元测试用例;

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

lingcavalry.junit5experience;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class Junit5ExperienceApplication {

public static void main(String[] args) {

SpringApplication.run(Junit5ExperienceApplication.class, args);

}

}

  • 以上就是一个典型的web工程,接下来一起为该工程编写单元测试用例;

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

[外链图片转存中…(img-OD36hfME-1714408157988)]

[外链图片转存中…(img-9K5W3G7p-1714408157988)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/712378
推荐阅读
相关标签
  

闽ICP备14008679号