Spring-集成Junit

一、引子

我们在Spring概念中提到:Spring的一大优势在于可以集成众多优秀的框架。毫无疑问,我首先向读者推荐的就是Junti框架。因为我们在前期的学习中,写一些小的demo,用Junit来进行小测试是非常合适的。下面让我们来具体看看如何集成Junit。

二、Spring集成之前

我们首先来看看在Spring集成Junti框架之前我们是怎么做测试的。

我们当然会引入junti的依赖

XML 复制代码
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

然后创建一个测试类,在测试方法上加上**@Test** 注解,运行这个方法就完成了一个测试。例如我们在Spring注解开发中用到的一个原生Junti的测试类:

java 复制代码
mport com.bylearning.spring.config.SpringConfiguration;
import com.bylearning.spring.controller.UserController;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class IOCByAnnotationTest {
 
    @Test
    public void test() throws SQLException {
//        ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");
        ApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        UserController us = ioc.getBean("userController", UserController.class);
        DataSource dataSource = (DataSource) ioc.getBean(DataSource.class);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        us.saveUser();
    }
}

我们可以看到我们需要先根据配置文件(或配置类)创建出一个IoC容器,然后从IoC容器中取我们需要的对象。

有的读者可能会有疑问,这不是已经使用了Junit来做测试吗?不妨设想,如果每个测试方法都需要先创建一个IoC容器,然后再用getBean方法去获取我们想要的测试对象,这个方法也太不优雅了,而且并没有体现出Spring集成这一关键。请读者继续看。

三、Spring集成Junit快速使用
引入spring-test依赖,当然junit依赖依然保留:
XML 复制代码
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.1</version>
            <scope>test</scope>
        </dependency>

在测试类上使用**@RunWith(SpringJUnit4ClassRunner.class)** 注解,它的作用就是提供一个在JUnit环境下运行Spring测试的环境。

使用**@ContextConfiguration指定配置文件或配置类**。在测试类上使用@ContextConfiguration注解,它的作用就是加载Spring的配置文件或配置类,让Spring的环境能够构建起来。你可以使用@ContextConfiguration("classpath:applicationContext.xml")来指定配置文件的路径,或者使用@ContextConfiguration(classes = {AppConfig.class})来指定配置类。

使用**@Autowired注入需要测试的对象**。在测试类中,你可以使用@Autowired注解来自动注入你需要测试的对象,这样你就可以在测试方法中直接使用这个对象了。

于是,我可以个性测试类如下:

java 复制代码
import com.bylearning.spring.config.SpringConfiguration;
import com.bylearning.spring.controller.UserController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
public class SpringTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void test() throws SQLException {
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }
}

这样是不是优雅多了呢?当然介绍Spring集成Junit只是本篇分享的一小部分目的,笔者一贯愿意以最精简的代码实现理想的效果。更重要的,是想让读者在继续深入学习Spring之前能更好地体会Spring易于集成其它框架这一优势,以及为什么要这么做,为什么这是大家通用的做法。只有在对比之间,才能看出技术选择的优势。

相关推荐
wxin_VXbishe23 分钟前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
无心水31 分钟前
分布式定时任务与SELECT FOR UPDATE:从致命陷阱到优雅解决方案(实战案例+架构演进)
服务器·人工智能·分布式·后端·spring·架构·wpf
Coder_Boy_1 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例
java·人工智能·spring boot·后端·spring
历程里程碑2 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
callJJ2 小时前
Spring AI ImageModel 完全指南:用 OpenAI DALL-E 生成图像
大数据·人工智能·spring·openai·springai·图像模型
郝学胜-神的一滴3 小时前
超越Spring的Summer(一): PackageScanner 类实现原理详解
java·服务器·开发语言·后端·spring·软件构建
MX_935916 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子16 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
晚霞的不甘18 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
寄存器漫游者19 小时前
Linux 软件编程 - IO 编程
linux·运维·spring