Spring整合Junit

Posted 戒爱学Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring整合Junit相关的知识,希望对你有一定的参考价值。

Spring整合Junit

整合Junit与整合Druid和MyBatis差异比较大,为什么呢?Junit是一个搞单元测试用的工具,它不是我们程序的主体,也不会参加最终程序的运行,从作用上来说就和之前的东西不一样,它不是做功能的,看做是一个辅助工具就可以了。

1、 环境准备

这块环境,大家可以直接使用Spring与Mybatis整合的环境即可。当然也可以重新创建一个,因为内容是一模一样,所以我们直接来看下项目结构即可:

2、 整合Junit步骤

在上述环境的基础上,我们来对Junit进行整合。

步骤1:引入依赖

pom.xml

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>
步骤2:编写测试类

在test\\java下创建一个AccountServiceTest,这个名字任意

//设置类运行器
@RunWith(SpringJUnit4ClassRunner.class)
//设置Spring环境对应的配置类
@ContextConfiguration(classes = SpringConfiguration.class) //加载配置类
//@ContextConfiguration(locations="classpath:applicationContext.xml")//加载配置文件
public class AccountServiceTest 
    //支持自动装配注入bean
    @Autowired
    private AccountService accountService;
    @Test
    public void testFindById()
        System.out.println(accountService.findById(1));

    
    @Test
    public void testFindAll()
        System.out.println(accountService.findAll());
    

注意:

  • 单元测试,如果测试的是注解配置类,则使用@ContextConfiguration(classes = 配置类.class)
  • 单元测试,如果测试的是配置文件,则使用@ContextConfiguration(locations=配置文件名,...)
  • Junit运行后是基于Spring环境运行的,所以Spring提供了一个专用的类运行器,这个务必要设置,这个类运行器就在Spring的测试专用包中提供的,导入的坐标就是这个东西SpringJUnit4ClassRunner
  • 上面两个配置都是固定格式,当需要测试哪个bean时,使用自动装配加载对应的对象,下面的工作就和以前做Junit单元测试完全一样了

知识点1:@RunWith

名称 @RunWith
类型 测试类注解
位置 测试类定义上方
作用 设置JUnit运行器
属性 value(默认):运行所使用的运行期

知识点2:@ContextConfiguration

名称 @ContextConfiguration
类型 测试类注解
位置 测试类定义上方
作用 设置JUnit加载的Spring核心配置
属性 classes:核心配置类,可以使用数组的格式设定加载多个配置类
locations:配置文件,可以使用数组的格式设定加载多个配置文件名称

Spring整合junit测试

本节内容:

  • Spring整合junit测试的意义
  • Spring整合junit测试

 

一、Spring与整合junit测试的意义

在没整合junit之前,我们在写测试方法时,需要在每个方法中手动创建容器,获取对象,比如下面的代码,红色部分都是重复的代码。如果要测试很多功能的话,每次都得手动去创建容器,很麻烦。如果你测试的两个功能中用到某个相同的对象,获取对象的代码也得写一遍。

public class test {

    @Test
    public void test1(){
        //1.创建容器对象(创建Spring的工厂类)
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/wisedu/annotation/applicationContext.xml"); //ClassPathXmlApplicationContext(从类路径下加载xml的Application容器)是org.springframework.context.ApplicationContext的实现类
        //2.向容器"要"User对象(通过工厂解析XML获取Bean实例)
        User user = (User)ac.getBean("user");
        //3.打印User对象
        System.out.print(user);

    }

    @Test
    public void test2(){
        //1.创建容器对象(创建Spring的工厂类)
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/wisedu/annotation/applicationContext.xml"); //ClassPathXmlApplicationContext(从类路径下加载xml的Application容器)是org.springframework.context.ApplicationContext的实现类
        //2.向容器"要"User对象(通过工厂解析XML获取Bean实例)
        User user = (User)ac.getBean("user");
        User user2 = (User)ac.getBean("user");
        User user3 = (User)ac.getBean("user");
        //3.打印User对象
        System.out.print(user==user2);

    }
}

Spring比较体贴,Spring可以整合Junit测试,使用更加便捷的方式在测试代码中使用容器的对象。这个知识点只是为了在测试时更加方便,不使用也没有关系。

 

二、Spring整合junit测试

1. 需要引入一个新的jar包

spring-test-4.2.4.RELEASE.jar

 

2. 使用注解

@RunWith(SpringJUnit4ClassRunner.class) //帮我们创建容器

但是由于Spring配置文件位置和名字任意,所以得指明配置文件位置和名称。

@ContextConfiguration("classpath:com/wisedu/annotation/applicationContext.xml") //指定创建容器时使用哪个文件
//@ContextConfiguration(locations = "classpath:com/wisedu/annotation/applicationContext.xml")

另外,原来在每个测试方法里都要手动获取对象,现在我们可以使用为变量注入值:

@Resource(name = "user")
private User u;

编写测试方法:

@Test
public void test3(){
    System.out.print(u);

}

这样每个测试方法里都不需要手动创建容器和手动获取对象了。

整个代码如下:

@RunWith(SpringJUnit4ClassRunner.class) //帮我们创建容器
@ContextConfiguration("classpath:com/wisedu/annotation/applicationContext.xml") //指定创建容器时使用哪个文件
//@ContextConfiguration(locations = "classpath:com/wisedu/annotation/applicationContext.xml")
public class test {
    //将名为user的对象注入到u变量中
    @Resource(name = "user")
    private User u;

    @Test
    public void test3(){
        System.out.print(u);

    }
}

 

以上是关于Spring整合Junit的主要内容,如果未能解决你的问题,请参考以下文章

Spring -- Spring整合Junit

Spring整合junit测试

Spring整合junit测试

Spring整合Junit

spring入门-整合junit和web

Spring整合junit