Spring 6 第6章——单元测试:Junit

一、整合JUnit5

在之前的测试方法中,几乎都能看到以下两行代码:

java 复制代码
ApplicationContext context = new ClassPathXmlApplicationContext("xxx.xml");
Xxxx xxx = context.getBean(Xxxx.class);

这两行代码的作用是创建Spring容器,最终获取到对象,但是每次测试都需要重复编写

针对上述问题,我们需要的是程序能自动帮我们创建容器,我们都知道JUnit无法知晓我们是否使用了Spring框架,更不用说帮我们创建Spring容器了

Spring提供了一个运行器,可以读取配置文件(或注解)来创建容器。我们只需要告诉它配置文件位置就可以了

这样一来,我们通过Spring整合JUnit可以使程序创建Spring容器了

(1)搭建子模块

  1. 搭建子模块spring6-junit
  2. 如图所示:

(2)引入依赖

  1. 引入相关依赖:

    XML 复制代码
    <dependencies>
        <!--spring context依赖-->
        <!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.2</version>
        </dependency>
    
        <!--spring对junit的支持相关依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>6.0.2</version>
        </dependency>
    
        <!--junit5测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.0</version>
        </dependency>
    
        <!--log4j2的依赖-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j2-impl</artifactId>
            <version>2.19.0</version>
        </dependency>
    </dependencies>

(3)添加配置文件

  1. 添加Spring的配置文件:

  2. XML文件代码:

    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"
           xmlns:aop="http://www.springframework.org/schema/aop"
           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
                               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
                              ">
    
           <context:component-scan base-package="com.atguigu.spring6"></context:component-scan>
    </beans>

(4)添加Java类

  1. 编写一个User类:

    java 复制代码
    package com.atguigu.spring6.junit.junit5;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class User {
    
        public void run(){
            System.out.println("user......");
        }
    
    }

(5)测试

  1. 测试类和测试方法:

    java 复制代码
    package com.atguigu.spring6.junit.junit5;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
    
    @SpringJUnitConfig(locations = "classpath:bean.xml")
    public class SpringTestJUnit5 {
        @Autowired
        private User user;
        //测试方法:
        @Test
        public void testUser(){
            System.out.println(user);
            user.run();
        }
    }
  2. 测试效果:

  3. 或者还有一种注解方式,也能成功

    java 复制代码
    package com.atguigu.spring6.junit.junit5;
    
    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:bean.xml")
    public class SpringTestJUnit5 {
        @Autowired
        private User user;
        //测试方法:
        @Test
        public void testUser(){
            System.out.println(user);
            user.run();
        }
    }

二、整合JUnit4

(1)添加依赖

  1. 引入相关依赖:

    XML 复制代码
    <!-- junit测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
  2. 这时JUnit4和JUnit5的不同之处:

  3. 第二个不同之处:JUnit4JUnit5

(2)测试

  1. 测试代码:

    java 复制代码
    package com.atguigu.spring6.junit.junit4;
    
    import com.atguigu.spring6.junit.junit5.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:bean.xml")
    public class SpringTestJUnit4 {
        @Autowired
        private User user;
        @Test
        public void testUser(){
            System.out.println(user);
            user.run();
        }
    }
  2. 测试效果:

相关推荐
wang_shu_mo_ran8 小时前
MyBatis 从入门到进阶(一)
java·spring·mybatis
瑞雪兆丰年兮14 小时前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
码间留白15 小时前
从怀疑到真香——AI 重构代码后,我不再追求“最合适”,而是做好这两件事:测试和优化
单元测试·ai编程·代码质量·工程效率·ai重构代码
杨凯凡1 天前
Spring AI RAG 实战:向量检索、租户过滤、引用溯源与防幻觉边界
java·人工智能·spring
草莓熊Lotso2 天前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
SL_staff2 天前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
nice_lcj5202 天前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
努力努力再努力wz3 天前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
杨凯凡3 天前
Spring Framework 7 HTTP Interface 实战:声明式 RestClient、超时与测试
java·spring·http
Java码农也是农4 天前
Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选
java·spring boot·spring·事务