Spring5可以整合Junit4或者Junit5使用,但是两者整合时有一些细微的差别,本文做出了详细的介绍。
1. 相关pom.xml文件
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringLearn</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!--Start--Spring5的关键Jar包依赖--Start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.5.RELEASE</version>
<scope>test</scope>
</dependency>
<!--End--Spring5的关键Jar包依赖--End-->
<!--Start--Junit5的Jar包依赖--Start-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<!--RELEASE表示获取最新版本,此文写作时是5.7.0-->
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!--End--Junit5的Jar包依赖--End-->
<!--Start--Junit4的Jar包依赖--Start-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--End--Junit4的Jar包依赖--End-->
</dependencies>
</project>
2. Spring5+Junit4单元测试
2.1 单元测试代码
package com.jinyuxin.sping010601.config;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.client.RestTemplate;
/**
* @author 金余新
* @date 2021/1/6 14:54
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfiguration.class)
public class AppConfigurationTest {
@Autowired
private RestTemplate restTemplate;
@org.junit.Test
public void restTemplate() {
System.out.println(restTemplate);
ResponseEntity<String> res = restTemplate.getForEntity("https://www.baidu.com", String.class);
System.out.println(res.getBody());
}
}
2.2 AppConfiguration配置类代码
package com.jinyuxin.sping010601.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @author 金余新
* @date 2021/1/6 14:51
*/
@Configuration
public class AppConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
2.3. Spring5+Junit4测试结果如下
3. Spring5+Junit5单元测试代码
3.1 单元测试代码
package com.jinyuxin.sping010601.config;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.web.client.RestTemplate;
/**
* @author 金余新
* @date 2021/1/6 14:54
*/
//下面两个注解可以用@SpringJunitConfig(AppConfiguration.class)替代
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfiguration.class)
public class AppConfigurationTest {
@Autowired
private RestTemplate restTemplate;
@org.junit.jupiter.api.Test
public void restTemplate() {
System.out.println(">>>>>>>>>"+restTemplate);
ResponseEntity<String> res = restTemplate.getForEntity("https://www.jd.com", String.class);
System.out.println(res.getBody());
}
}
3.2 配置类同上
3.3 测试结果
4. 总结
4.1 不同点
(1)Spring5+Junit4时,使用如下两个注解。
@RunWith(SpringJUnit4ClassRunner.class)
@org.junit.Test
Spring5+Junit5时,使用如下两个注解。
@ExtendWith(SpringExtension.class)
@org.junit.jupiter.api.Test
(2)整合时使用的启动类不一样。
整合Junit4时是:org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
整合Junit5时是:
org.springframework.test.context.junit.jupiter.SpringExtension;
两者均是spring-test包中提供的类。
4.2 相同点
加载配置类或者配置文件均使用注解
@ContextConfiguration(classes = AppConfiguration.class)
注意事项:在使用Spring5时,Junit版本最低为4.12,否则就会报错。