Skip to content

17 Spring6整合JUnit5

17.1 Spring 对 JUnit 4 的支持

准备工作:
```XML title:pom.xml

4.0.0

<groupId>com.powernode</groupId>
<artifactId>spring6-015-junit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<!--仓库-->
<repositories>
    <!--spring里程碑版本的仓库-->
    <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestone Repository</name>
        <url>https://repo.spring.io/milestone</url>
    </repository>
</repositories>

<dependencies>
    <!--spring context依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.0-M2</version>
    </dependency>
    <!--spring对junit的支持相关依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>6.0.0-M2</version>
    </dependency>
    <!--junit4依赖-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

```Java title:声明
package com.powernode.spring6.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author 动力节点
 * @version 1.0
 * @className User
 * @since 1.0
 **/
@Component
public class User {

    @Value("张三")
    private String name;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User() {
    }

    public User(String name) {
        this.name = name;
    }
}

```XML title:spring.xml

单元测试:  
```Java
package com.powernode.spring6.test;  

import com.powernode.spring6.bean.User;  
import org.junit.Test;  
import org.junit.runner.RunWith;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.test.context.ContextConfiguration;  
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  

/\*\*  
\* @author 动力节点  
\* @version 1.0  
\* @className SpringJUnit4Test  
\* @since 1.0  
\*\*/  
@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration("classpath:spring.xml")  
public class SpringJUnit4Test {  

    @Autowired  
    private User user;  

    @Test  
    public void testUser(){  
        System.out.println(user.getName());  
    }  
}  

执行结果如下:
![[17.01-1.png]]

Spring 提供的方便主要是这几个注解:
@RunWith (SpringJUnit 4 ClassRunner. class) @ContextConfiguration ("classpath: spring. xml")

在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired。比较方便。


17.2 Spring 对 JUnit 5 的支持

引入 JUnit 5 的依赖,Spring 对 JUnit 支持的依赖还是:spring-test,如下:
```XML title:pom.xml

4.0.0

<groupId>com.powernode</groupId>
<artifactId>spring6-015-junit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<!--仓库-->
<repositories>
    <!--spring里程碑版本的仓库-->
    <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestone Repository</name>
        <url>https://repo.spring.io/milestone</url>
    </repository>
</repositories>

<dependencies>
    <!--spring context依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.0-M2</version>
    </dependency>
    <!--spring对junit的支持相关依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>6.0.0-M2</version>
    </dependency>
    <!--junit5依赖-->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.9.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

```Java title:SpringJUnit5Test.java
package com.powernode.spring6.test;  

import com.powernode.spring6.bean.User;  
import org.junit.jupiter.api.Test;  
import org.junit.jupiter.api.extension.ExtendWith;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.test.context.ContextConfiguration;  
import org.springframework.test.context.junit.jupiter.SpringExtension;  

@ExtendWith(SpringExtension.class)  
@ContextConfiguration("classpath:spring.xml")  
public class SpringJUnit5Test {  

    @Autowired  
    private User user;  

    @Test  
    public void testUser(){  
        System.out.println(user.getName());  
    }  
}  

在 JUnit 5 当中,可以使用 Spring 提供的以下两个注解,标注到单元测试类上,这样在类当中就可以使用@Autowired 注解了。

  • @ExtendWith (SpringExtension. class)
  • @ContextConfiguration ("classpath: spring. xml")