Spring整合JUnit详解

 更新时间:2023年04月17日 11:13:46   作者:@每天都要敲代码  
Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,这篇文章主要介绍如何配置数据源、注解开发以及整合Junit,感兴趣的同学可以参考一下

一:Spring整合JUnit

1. Spring对JUnit4的支持

准备工作:pom.xml

注:以前是直接使用单元测试Junit,现在使用Spring对Junit的整合!

<?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.bjpowernode</groupId>
    <artifactId>spring6-014-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>
            <!--这个版本spring6,既支持Junit4又支持Junit5依赖-->
            <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>

声明Bean

package com.bjpowernode.spring6.bean;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
@Component("user") // 纳入spring管理
public class User {
    @Value("张三") // 通过注解的方式进行赋值
    private String name;
 
    public User(String name) {
        this.name = name;
    }
    public User() {
    }
 
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

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.bjpowernode.spring6.bean"/>
    
</beans>

单元测试:

①以前的写法

package com.bjpowernode.spring6.test;
 
import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class SpringJunit4Test {
    @Test
    public void testUser1(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User user = applicationContext.getBean("user", User.class);
        System.out.println(user.getName());
    }
}

②使用Spring对Junit4的支持写法

(1)使用两个注解:

①@RunWith(SpringJUnit4ClassRunner.class),这个注解是junit里面的;

②@ContextConfiguration("classpath:spring.xml"),这个注解时Spring框架里面的;

使用这两个注解就相当于new ClassPathXmlApplicationContext("spring.xml");

(2)并且对于applicationContext.getBean("user", User.class);这段代码,我们可以先定义一个User属性,例如:private User user,然后使用@Autowired注解一注入即可

(3)所以我们以后在编写测试代码,如下:

package com.bjpowernode.spring6.test;
 
import com.bjpowernode.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 testUser2(){
        System.out.println(user.getName());
    }
}

执行结果

在JUnit4当中,Spring提供的方便主要是这几个注解:

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

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

2. Spring对JUnit5的支持

引入JUnit5的依赖,Spring对JUnit支持的依赖还是:spring-test,如下:

<!--junit5依赖-->
<dependency>
     <groupId>org.junit.jupiter</groupId>
     <artifactId>junit-jupiter</artifactId>
     <version>5.9.0</version>
     <scope>test</scope>
</dependency>

单元测试类

package com.bjpowernode.spring6.test;
 
import com.bjpowernode.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 uer;
    @Test
    public void testUser(){
        System.out.println(uer.getName());
    }
}

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

①@ExtendWith(SpringExtension.class)

②@ContextConfiguration("classpath:spring.xml")

总结:对于Spring对Junit4和Junit5的支持当中,代码主要有两点不同:

第一点:引入的注解不同

对于Junit4引入的一个注解是@RunWith(SpringJUnit4ClassRunner.class)

对于Junit5引入的一个注解时@ExtendWith(SpringExtension.class)

第二点:使用@Test注解的时导入的包不同

对于Junit4导入的包时org.junit.Test

对于Junit5导入的包时org.junit.jupiter.api.Test

以上就是Spring整合JUnit详解的详细内容,更多关于Spring整合JUnit的资料请关注脚本之家其它相关文章!

相关文章

  • mybatis xml中特殊字符处理及特殊符号

    mybatis xml中特殊字符处理及特殊符号

    这篇文章主要介绍了mybatis xml中特殊字符处理及mybatis特殊符号处理技巧,mybatis特殊符号处理给大家介绍了两种写法,感兴趣的朋友一起看看吧
    2018-03-03
  • 使用feign调用接口时调不到get方法的问题及解决

    使用feign调用接口时调不到get方法的问题及解决

    这篇文章主要介绍了使用feign调用接口时调不到get方法的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java实现JSON与XML相互转换的简明教程

    Java实现JSON与XML相互转换的简明教程

    Java实现复杂数据结构(如嵌套对象、数组)在 JSON 与 XML 之间的相互转换,可以使用 Jackson 和 Jackson XML 扩展库来完成,Jackson 是一个流行的 JSON 处理库,通过 Jackson 的 XML 扩展库,可以实现 JSON 和 XML 之间的转换,需要的朋友可以参考下
    2024-08-08
  • Java使用ArrayList实现扑克牌的示例代码

    Java使用ArrayList实现扑克牌的示例代码

    学习了关于集合类的知识,我们可以做一个小项目来加深对集合类知识的学习!本文就来利用ArrayList实现扑克牌发牌洗牌效果,需要的可以参考一下
    2022-10-10
  • spring中的事务执行流程图解

    spring中的事务执行流程图解

    这篇文章主要介绍了spring中的事务执行流程图解,Spring事务是Spring框架提供的一种管理数据库事务的机制,它通过将一系列数据库操作封装在一个事务中,保证这些操作要么全部成功执行,要么全部回滚,从而确保数据的一致性和完整性,需要的朋友可以参考下
    2023-10-10
  • java实现简单银行管理系统

    java实现简单银行管理系统

    这篇文章主要为大家详细介绍了java实现简单银行管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 深入了解SpringAOP中的jdk动态代理与CGlib

    深入了解SpringAOP中的jdk动态代理与CGlib

    这篇文章主要介绍了深入了解SpringAOP中的jdk动态代理与CGlib,一般我们编写程序的思想是纵向的,也就是一个方法代码从该方法第一行开始往下一步一步走,直到走完最后一行代码,也就是说很多业务都需要的比如用户鉴权,资源释放等,需要的朋友可以参考下
    2023-12-12
  • java简单读取properties配置文件的方法示例

    java简单读取properties配置文件的方法示例

    这篇文章主要介绍了java简单读取properties配置文件的方法,涉及java针对properties配置的载入及文件属性读取相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • Springboot+Vue+shiro实现前后端分离、权限控制的示例代码

    Springboot+Vue+shiro实现前后端分离、权限控制的示例代码

    这篇文章主要介绍了Springboot+Vue+shiro实现前后端分离、权限控制的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java+Windows+ffmpeg实现视频转换功能

    Java+Windows+ffmpeg实现视频转换功能

    这篇文章主要为大家详细介绍了Java+Windows+ffmpeg实现视频转换功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论