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 的步骤
- 导入 Spring 集成 Junit 的坐标
- 使用
@Runwith
注解替换掉原来的运行器 - 使用
@ContextConfiguraton
指定配置文件或配置类 - 使用
@Autowired
注入需要测试的对象 - 创建测试方法进行测试
示例代码:
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 = {SpringConfiguration.class})
public class SpringJunitTest {
@Autowired
private UserService userService;
@Autowired
private DataSource dataSource;
@Test
public void test1() throws Exception {
userService.save();
System.out.println(dataSource.getConnection());
}
}