目录
- 1. 确保项目中包含JUnit 4依赖
- 添加JUnit 4依赖
- 2. 配置Spring Boot使用JUnit 4
- 在测试类中使用`@RunWith`注解
- 3. 编写测试代码
- 4、总结
- 【扩展】@RunWith(SpringRunner.class) 中SpringRunner的作用
- 1. **加载 Spring 应用上下文(ApplicationContext)**
- 2. **启用 Spring 依赖注入(Dependency Injection)**
- 3. **支持Spring事务(Transaction Management)**
- 4. **支持Spring的配置类(Configuration)**
- 5. **支持 Spring TestContext Framework**
- `SpringRunner.class` 实际上是 `SpringJUnit4ClassRunner.class` 的别名
- 总结
在Spring Boot中集成JUnit 4其实也是非常简单的。尽管Spring Boot 3默认集成JUnit 5,但你仍然可以配置并使用JUnit 4。下面是集成JUnit 4的步骤。
1. 确保项目中包含JUnit 4依赖
首先,你需要确保pom.xml
中包含JUnit 4的相关依赖。如果你已经有了spring-boot-starter-test
依赖,可以选择将JUnit 5的依赖替换为JUnit 4,或者直接添加JUnit 4依赖。
添加JUnit 4依赖
在pom.xml
中,添加以下JUnit 4的依赖:
<dependencies>
<!-- Spring Boot Starter Test(JUnit 4支持)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加JUnit 4支持 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
Spring Boot的spring-boot-starter-test
默认集成JUnit 5,如果你要使用JUnit 4,可以排除JUnit 5的依赖,并添加JUnit 4的依赖。
2. 配置Spring Boot使用JUnit 4
Spring Boot默认启用了JUnit 5作为测试框架。如果你想使用JUnit 4,需要确保Spring Boot在运行时使用JUnit 4。为此,你需要配置测试类的运行器。
在测试类中使用@RunWith
注解
JUnit 4使用@RunWith
注解来指定一个自定义的测试运行器 。在Spring Boot中,你需要使用SpringRunner.class
作为测试运行器,它会帮助你加载Spring应用上下文。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
@Test
public void test() {
// 编写测试代码
}
}
3. 编写测试代码
JUnit 4的测试代码与JUnit 5类似,只是使用不同的注解。例如,@Test
注解用于标记测试方法,@Before
和@After
分别用于测试方法前后的初始化和清理,@BeforeClass
和@AfterClass
用于类级别的初始化和清理。
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
@Before
public void setUp() {
// 测试前的初始化
}
@After
public void tearDown() {
// 测试后的清理
}
@Test
public void contextLoads() {
// 测试Spring上下文是否加载成功
}
}
4、总结
- Spring Boot默认使用JUnit 5,但可以通过排除JUnit 5依赖并引入JUnit 4来使用JUnit 4。
- 使用
@RunWith(SpringRunner.class)
来指定JUnit 4的测试运行器。 - 编写测试时,可以使用JUnit 4的常见注解,如
@Before
、@After
、@Test
等。
通过以上步骤,你就可以在Spring Boot中使用JUnit 4进行单元测试了。如果你有其他问题或者遇到困难,随时告诉我!
【扩展】@RunWith(SpringRunner.class) 中SpringRunner的作用
@RunWith(SpringRunner.class)
是JUnit 4的一个注解,它告诉JUnit使用SpringRunner
作为测试的运行器(Test Runner)。SpringRunner
是由 Spring Framework 提供的一个特殊的测试运行器,它能够为JUnit测试提供Spring的支持,确保Spring容器正确地加载和管理应用程序的上下文。
具体来说,SpringRunner
的作用包括:
1. 加载 Spring 应用上下文(ApplicationContext)
- 当你使用
@SpringBootTest
注解时,Spring需要加载应用的上下文,SpringRunner
会确保在执行测试时初始化Spring容器并注入测试所需的依赖。 - 例如,它会启动 Spring 上下文,自动扫描并注入
@Autowired
注解的Bean。
2. 启用 Spring 依赖注入(Dependency Injection)
SpringRunner
会自动为测试类注入Spring容器中的组件。例如,如果你有一个被@Service
或@Component
标注的类,SpringRunner
会将这些依赖注入到测试类中。@Autowired
、@MockBean
等注解会正常工作,Spring会自动注入这些Bean到测试类的成员变量中。
3. 支持Spring事务(Transaction Management)
- 在使用Spring的事务管理时,
SpringRunner
会帮助你管理事务(比如,使用@Transactional
注解)。每个测试方法运行后,可以自动回滚事务,保持数据库状态的一致性。
4. 支持Spring的配置类(Configuration)
- 如果你的测试类需要加载特定的Spring配置类,
SpringRunner
会确保这些配置类被正确加载。 - 你可以使用
@ContextConfiguration
或@SpringBootTest
注解指定要加载的配置类,SpringRunner
会帮助加载这些配置。
5. 支持 Spring TestContext Framework
SpringRunner
是 Spring TestContext Framework 的一部分,它提供了额外的功能,比如事件监听、测试环境的生命周期管理等。测试过程中,Spring会自动管理上下文的生命周期和状态,确保测试运行的一致性。
SpringRunner.class
实际上是 SpringJUnit4ClassRunner.class
的别名
SpringRunner.class
是 Spring 4 引入的新的名称,它的实际实现类是SpringJUnit4ClassRunner.class
。你可以把它看作是 Spring 提供的一个特定的JUnit 4测试运行器。
总结
@RunWith(SpringRunner.class)
的作用是让JUnit 4在执行测试时,能够使用Spring的测试框架(TestContext Framework)进行测试。这让你能够在JUnit 4测试中:
- 加载Spring应用上下文,
- 自动注入依赖,
- 使Spring的其他功能(如事务管理、事件监听等)能够正常工作。