天天看点

Spring5整合Junit4、Junit5

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测试结果如下

Spring5整合Junit4、Junit5

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 测试结果

Spring5整合Junit4、Junit5

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,否则就会报错。