Spring集成Junit

本文最后更新于:2 年前

问题引入

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

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

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

解决思路:

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

Spring集成Junit步骤

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

Spring集成Junit代码实现

  1. 导入 spring 集成 Junit 的坐标

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

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

    1
    2
    3
    4
    5
    @RunWith(SpringJUnit4ClassRunner.class)   //指定运行内核
    //@ContextConfiguration("classpath:applicationContext.xml") //指定核心配置文件
    @ContextConfiguration(classes = {SpringConfiguration.class}) //指定核心配置类
    public class SpringJunitTest {
    }
  4. 创建测试方法进行测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @RunWith(SpringJUnit4ClassRunner.class)   //指定运行内核
    //@ContextConfiguration("classpath:applicationContext.xml") //指定核心配置文件
    @ContextConfiguration(classes = {SpringConfiguration.class}) //指定核心配置类
    public class SpringJunitTest {

    @Autowired
    private UserService userService;

    @Autowired
    private DataSource dataSource;

    @Test
    public void test1() throws SQLException {
    userService.save();
    Connection conn = dataSource.getConnection();
    System.out.println(conn);
    }
    }


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!