- spring底层有一套API,这套API专门支持JUnit
Spring 对 JUnit4 的支持
Spring提供的方便主要是这几个注解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired。比较方便。
<dependencies>
<!-- spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.8</version>
</dependency>
<!-- spring对JUnit的支持的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<!-- 这个版本支持JUnit4也支持JUnit5 -->
<version>6.0.8</version>
</dependency>
<!-- junit 4 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
实体类
import org.springframework.beans.factory.annotation.Value;
/**
* ClassName: User
* Package: cw.study.spring.bean
* Description:
*
* @Author tcw
* @Create 2023-06-05 12:18
* @Version 1.0
*/
@Component
public class User {
@Value("张三")
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" + "name='" + name + '\'' + '}';
}
}
spring.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 组件扫描 -->
<context:component-scan base-package="cw.study.spring.bean"/>
</beans>
测试程序
import cw.study.spring.bean.User;
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;
/**
* ClassName: TestJUnit4
* Package: PACKAGE_NAME
* Description:
*
* @Author aa
* @Create 2023-06-05 12:19
* @Version 1.0
*/
@RunWith(SpringJUnit4ClassRunner.class) // JUnit4中的注解
// 使用注解的方式为测试类加载配置文件创建spring容器
@ContextConfiguration("classpath:spring.xml")
public class TestJUnit4 {
@Autowired // 自动为属性注入
private User user;
@Test
public void test01() {
// 测试方法中可以直接使用spring容器中的组件,不用在创建容器获取组件
System.out.println(user);
}
}
Spring对JUnit5的支持
依赖
- 引入JUnit5的依赖,Spring对JUnit支持的依赖还是:spring-test
<dependencies>
<!-- spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.8</version>
</dependency>
<!-- spring对JUnit的支持的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<!-- 这个版本支持JUnit4也支持JUnit5 -->
<version>6.0.8</version>
</dependency>
<!--junit5依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
实体类
package cw.study.spring.bean;
import org.springframework.beans.factory.annotation.Value;
/**
* ClassName: User
* Package: cw.study.spring.bean
* Description:
*
* @Author tcw
* @Create 2023-06-05 12:18
* @Version 1.0
*/
@Component
public class User {
@Value("张三")
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" + "name='" + name + '\'' + '}';
}
}
spring.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 组件扫描 -->
<context:component-scan base-package="cw.study.spring.bean"/>
</beans>
测试程序
- 如果使用配置类代替配置文件,注解用这个
@ContextConfiguration(classes = Spring6Config.class)
import cw.study.spring.bean.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
/**
* ClassName: TestJUnit5
* Package: PACKAGE_NAME
* Description:
*
* @Author tcw
* @Create 2023-06-05 12:31
* @Version 1.0
*/
@ExtendWith(SpringExtension.class) // JUnit5中的注解
// 使用注解的方式为测试类加载配置文件创建spring容器
@ContextConfiguration("classpath:spring.xml")
public class TestJUnit5 {
@Autowired // 自动为属性注入
private User user;
@Test
public void test01() {
// 测试方法中可以直接使用spring容器中的组件,不用在创建容器获取组件
System.out.println(user);
}
}