056-Spring 整合 Junit

3. Spring 整合 Junit

3.1 原始 Junit 测试 Spring 的问题

在测试类中,每个测试方法都有以下两行代码:

1
2
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountService as = ac.getBean("accountService", IAccountService.class);

这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。

3.2 上述问题解决思路

让 SpringJunit 负责创建 Spring 容器,但是需要将配置文件的名称告诉它,将需要进行测试Bean直接在测试类中进行注入

3.3 Spring集成Junit步骤

  1. 导入spring集成Junit的坐标
  2. 使用@Runwith 注解替换原来的运行期
  3. 使用 @ContextConfiguration 指定配置文件或配置类
  4. 使用 @Autowired 注入需要测试的对象
  5. 创建测试方法进行测试

3.4 Spring集成Junit代码实现

  1. 导入spring集成Junit的坐标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <dependencies>
    <!--此处需要注意的是,spring5 及以上版本要求 junit 的版本必须是 4.12 及以上-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
  2. 使用 @Runwith 注解替换原来的运行期

    1
    2
    3
    @RunWith(SpringJUnit4ClassRunner.class)
    public class SpringJunitTest {
    }
  3. 使用 @ContextConfiguration 指定配置文件或配置类

    1
    2
    3
    4
    5
    6
    7
    @RunWith(SpringJUnit4ClassRunner.class)
    //加载spring核心配置文件
    //@ContextConfiguration(value = {"classpath:applicationContext.xml"})
    //加载spring核心配置类
    @ContextConfiguration(classes = {SpringConfiguration.class})
    public class SpringJunitTest {
    }
  4. 使用 @Autowired 注入需要测试的对象

    1
    2
    3
    4
    5
    6
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = {SpringConfiguration.class})
    public class SpringJunitTest {
    @Autowired
    private UserService userService;
    }
  5. 创建测试方法进行测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = {SpringConfiguration.class})
    public class SpringJunitTest {
    @Autowired
    private UserService userService;
    @Test
    public void testUserService(){
    userService.save();
    }
    }

056-Spring 整合 Junit
https://flepeng.github.io/021-Java-01-course-056-Spring-整合-Junit/
作者
Lepeng
发布于
2020年2月2日
许可协议