Spring Framework 基础 第七章 Spring 整合 Junit


Spring Framework 基础 —— 第七章 Spring 整合 Junit


第七章 Spring 整合 Junit

1. 原始 Junit 测试 Spring 的问题

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

ApplicationContext app = new ClassPathXMLApplication("applicationContext.xml");
IAccountService as = ac.getBeans("accountService", IAccountService.class)

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

2. 上述问题的解决思路

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

3. Spring 集成 Junit 的步骤

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

示例代码:

pom.xml

<?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>org.example</groupId>
    <artifactId>spring_ioc_anno</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>16</maven.compiler.source>
        <maven.compiler.target>16</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.8</version>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.8</version>
        </dependency>
    </dependencies>
</project>

com.yourname.SpringJunitTest

import com.gregperlinli.config.SpringConfiguration;
import com.gregperlinli.service.UserService;
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;
import javax.sql.DataSource;

@RunWith(SpringJUnit4ClassRunner.class)
// @ContextConfiguration("classpath:applicationContext.xml")
@ContextConfiguration(classes = &#123;SpringConfiguration.class&#125;)
public class SpringJunitTest &#123;
    @Autowired
    private UserService userService;
    @Autowired
    private DataSource dataSource;

    @Test
    public void test1() throws Exception &#123;
        userService.save();
        System.out.println(dataSource.getConnection());
    &#125;
&#125;


文章作者: gregPerlinLi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 gregPerlinLi !
  目录