您现在的位置是:首页 >技术教程 >Spring对JUnit的支持网站首页技术教程
Spring对JUnit的支持
junit4
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>com.powernode</groupId>
<artifactId>spring6-junit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!--spring context依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.0-M2</version>
</dependency>
<!--spring对junit的支持相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.0-M2</version>
</dependency>
<!--junit4依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>
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="com.powernode.spring6.bean"/>
</beans>
单元测试:
package com.spring6.test;
import com.powernode.spring6.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;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJUnit4Test {
@Autowired
private User user;
@Test
public void testUser(){
System.out.println(user.getName());
}
}
Spring提供的几个注解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired。比较方便。
@ContextConfiguration("classpath:spring.xml")
代替
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
在 Spring 中,`@RunWith(SpringJUnit4ClassRunner.class)` 注解的作用是告诉 JUnit 使用 Spring 提供的测试运行器来执行测试方法。
SpringJUnit4ClassRunner 是 JUnit 的一个扩展类,它提供了对 Spring TestContext Framework 的集成支持。使用这个运行器,可以方便地在测试方法中使用 Spring 的功能,如自动注入依赖、加载 Spring 配置文件、创建 Spring 容器等。
具体来说,`@RunWith(SpringJUnit4ClassRunner.class)` 的作用包括:
1. 在测试类中创建 Spring 的应用上下文(ApplicationContext)。
2. 自动将测试类中的依赖注入(Dependency Injection)到被测试的对象中。
3. 执行测试方法前后,执行 Spring 的相关初始化和销毁操作。
4. 提供了访问 Spring 上下文和相关功能的便捷方法,如获取 Bean、执行事务等。通过使用 `@RunWith(SpringJUnit4ClassRunner.class)` 注解,可以让测试类与 Spring 进行集成,使得测试过程中能够充分利用 Spring 提供的依赖注入和其他功能,方便进行单元测试和集成测试。
JUnit5
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>com.powernode</groupId>
<artifactId>spring6-015-junit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!--spring context依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.0-M2</version>
</dependency>
<!--spring对junit的支持相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.0-M2</version>
</dependency>
<!--junit5依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>
package com.spring6.test;
import com.powernode.spring6.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;
@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJUnit5Test {
@Autowired
private User user;
@Test
public void testUser(){
System.out.println(user.getName());
}
}
`@RunWith(SpringJUnit4ClassRunner.class)` 和 `@ExtendWith(SpringExtension.class)` 都是用于在测试中将 Spring TestContext Framework 集成到 JUnit 中,实现与 Spring 的整合。它们的作用有以下区别:
1. JUnit 版本:`@RunWith(SpringJUnit4ClassRunner.class)` 是针对 JUnit 4.x 的注解,而 `@ExtendWith(SpringExtension.class)` 是针对 JUnit 5.x 的注解。因此,选择注解的依据是所使用的 JUnit 版本。
2. 注解类型:`@RunWith(SpringJUnit4ClassRunner.class)` 是使用 JUnit 的运行器(Runner)模型进行扩展,而 `@ExtendWith(SpringExtension.class)` 是使用 JUnit 5 的扩展模型进行扩展。JUnit 5 的扩展模型提供了更灵活的扩展机制,并与 Java 8+ 的新特性更好地集成。
3. 导入依赖:使用 `@RunWith(SpringJUnit4ClassRunner.class)` 需要导入 JUnit 4.x 和 Spring Test 相关的依赖,而使用 `@ExtendWith(SpringExtension.class)` 需要导入 JUnit 5.x 和 Spring Test 相关的依赖。根据所使用的 JUnit 版本选择相应的依赖。
总的来说,选择使用 `@RunWith(SpringJUnit4ClassRunner.class)` 还是 `@ExtendWith(SpringExtension.class)` 取决于所使用的 JUnit 版本。在使用 JUnit 5.x 的情况下,建议使用 `@ExtendWith(SpringExtension.class)` 注解来实现 Spring 的整合。