Spring整合单元测试JUnit
简介
到目前为止,我们所有的测试类,都需要手动编写创建容器的方法,如下:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // or ApplicationContext context = new AnnotationApplicationContext("applicationContext.xml"); context.getBean("beanName");
但是这种重复编写非常浪费,所以我们希望程序能自动帮我们创建。
Spring提供了一个运行器,可以读取配置文件(或注解)来创建容器。我们只需要告诉它配置文件的位置就可以。
这样就可以在Spring整合JUnit,使程序自动创建Spring容器。
JUnit的两个版本
目前JUnit有两个版本,JUnit4和JUnit5。下面分别介绍如何对接:
基础依赖:
<!--spring context依赖--> <!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.39</version> </dependency> <!--log4j2的依赖--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.19.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>2.19.0</version> </dependency>
基础Spring配置appContext.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.sheeprunner.fjunit" /> </beans>
(1)整合JUnit5
<!--spring对junit的支持相关依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.3.39</version> </dependency> <!--junit5测试--> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.8.2</version> </dependency>
代码(主要关注注解):
// 方式一 @SpringJUnitConfig(locations = "classpath:appContext.xml") // 方式二 // @ExtendWith(SpringExtension.class) // @ContextConfiguration("classpath:appContext.xml") public class TestSpringJUnit5 { @Autowired private Classmate classmate; @Test public void testClassmate() { System.out.println(classmate); } }
(2)整合JUnit4
依赖:
<!-- junit测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
代码:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:appContext.xml") public class TestSpringJUnit4 { @Autowired private Classmate classmate; @Test public void testClassmate() { System.out.println(classmate.toString()); } }