您现在的位置是:首页 >技术教程 >Spring对JUnit的支持网站首页技术教程

Spring对JUnit的支持

若云止水 2024-09-29 00:01:04
简介Spring对JUnit的支持

junit4

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>com.powernode</groupId>
    <artifactId>spring6-junit</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    

    <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>

</project>

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.powernode.spring6.bean"/>
</beans>

单元测试:

package com.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;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJUnit4Test {

    @Autowired
    private User user;

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

Spring提供的几个注解:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")

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

@ContextConfiguration("classpath:spring.xml") 

代替 

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

 

在 Spring 中,`@RunWith(SpringJUnit4ClassRunner.class)` 注解的作用是告诉 JUnit 使用 Spring 提供的测试运行器来执行测试方法。

SpringJUnit4ClassRunner 是 JUnit 的一个扩展类,它提供了对 Spring TestContext Framework 的集成支持。使用这个运行器,可以方便地在测试方法中使用 Spring 的功能,如自动注入依赖、加载 Spring 配置文件、创建 Spring 容器等。

具体来说,`@RunWith(SpringJUnit4ClassRunner.class)` 的作用包括:

1. 在测试类中创建 Spring 的应用上下文(ApplicationContext)。
2. 自动将测试类中的依赖注入(Dependency Injection)到被测试的对象中。
3. 执行测试方法前后,执行 Spring 的相关初始化和销毁操作。
4. 提供了访问 Spring 上下文和相关功能的便捷方法,如获取 Bean、执行事务等。

通过使用 `@RunWith(SpringJUnit4ClassRunner.class)` 注解,可以让测试类与 Spring 进行集成,使得测试过程中能够充分利用 Spring 提供的依赖注入和其他功能,方便进行单元测试和集成测试。

 

 

JUnit5

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>com.powernode</groupId>
    <artifactId>spring6-015-junit</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    

    <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>

</project>
package com.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());
    }
}

 

`@RunWith(SpringJUnit4ClassRunner.class)` 和 `@ExtendWith(SpringExtension.class)` 都是用于在测试中将 Spring TestContext Framework 集成到 JUnit 中,实现与 Spring 的整合。它们的作用有以下区别:

1. JUnit 版本:`@RunWith(SpringJUnit4ClassRunner.class)` 是针对 JUnit 4.x 的注解,而 `@ExtendWith(SpringExtension.class)` 是针对 JUnit 5.x 的注解。因此,选择注解的依据是所使用的 JUnit 版本。

2. 注解类型:`@RunWith(SpringJUnit4ClassRunner.class)` 是使用 JUnit 的运行器(Runner)模型进行扩展,而 `@ExtendWith(SpringExtension.class)` 是使用 JUnit 5 的扩展模型进行扩展。JUnit 5 的扩展模型提供了更灵活的扩展机制,并与 Java 8+ 的新特性更好地集成。

3. 导入依赖:使用 `@RunWith(SpringJUnit4ClassRunner.class)` 需要导入 JUnit 4.x 和 Spring Test 相关的依赖,而使用 `@ExtendWith(SpringExtension.class)` 需要导入 JUnit 5.x 和 Spring Test 相关的依赖。根据所使用的 JUnit 版本选择相应的依赖。

总的来说,选择使用 `@RunWith(SpringJUnit4ClassRunner.class)` 还是 `@ExtendWith(SpringExtension.class)` 取决于所使用的 JUnit 版本。在使用 JUnit 5.x 的情况下,建议使用 `@ExtendWith(SpringExtension.class)` 注解来实现 Spring 的整合。

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。