Spring整合JUnit详解
作者:@每天都要敲代码
一:Spring整合JUnit
1. Spring对JUnit4的支持
准备工作:pom.xml
注:以前是直接使用单元测试Junit,现在使用Spring对Junit的整合!
<?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.bjpowernode</groupId> <artifactId>spring6-014-junit</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!--仓库--> <repositories> <!--spring里程碑版本的仓库--> <repository> <id>repository.spring.milestone</id> <name>Spring Milestone Repository</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> <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> <!--这个版本spring6,既支持Junit4又支持Junit5依赖--> <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>
声明Bean
package com.bjpowernode.spring6.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("user") // 纳入spring管理 public class User { @Value("张三") // 通过注解的方式进行赋值 private String name; public User(String name) { this.name = name; } public User() { } @Override public String toString() { return "User{" + "name='" + name + '\'' + '}'; } public String getName() { return name; } public void setName(String name) { this.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="com.bjpowernode.spring6.bean"/> </beans>
单元测试:
①以前的写法
package com.bjpowernode.spring6.test; import com.bjpowernode.spring6.bean.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringJunit4Test { @Test public void testUser1(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); User user = applicationContext.getBean("user", User.class); System.out.println(user.getName()); } }
②使用Spring对Junit4的支持写法
(1)使用两个注解:
①@RunWith(SpringJUnit4ClassRunner.class),这个注解是junit里面的;
②@ContextConfiguration("classpath:spring.xml"),这个注解时Spring框架里面的;
使用这两个注解就相当于new ClassPathXmlApplicationContext("spring.xml");
(2)并且对于applicationContext.getBean("user", User.class);这段代码,我们可以先定义一个User属性,例如:private User user,然后使用@Autowired注解一注入即可
(3)所以我们以后在编写测试代码,如下:
package com.bjpowernode.spring6.test; import com.bjpowernode.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 testUser2(){ System.out.println(user.getName()); } }
执行结果
在JUnit4当中,Spring提供的方便主要是这几个注解:
①@RunWith(SpringJUnit4ClassRunner.class)
②@ContextConfiguration("classpath:spring.xml")
单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired,比较方便!
2. Spring对JUnit5的支持
引入JUnit5的依赖,Spring对JUnit支持的依赖还是:spring-test,如下:
<!--junit5依赖--> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.9.0</version> <scope>test</scope> </dependency>
单元测试类
package com.bjpowernode.spring6.test; import com.bjpowernode.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 uer; @Test public void testUser(){ System.out.println(uer.getName()); } }
在JUnit5当中,可以使用Spring提供的以下两个注解,标注到单元测试类上,这样在类当中就可以使用@Autowired注解了。
①@ExtendWith(SpringExtension.class)
②@ContextConfiguration("classpath:spring.xml")
总结:对于Spring对Junit4和Junit5的支持当中,代码主要有两点不同:
第一点:引入的注解不同
对于Junit4引入的一个注解是@RunWith(SpringJUnit4ClassRunner.class)
对于Junit5引入的一个注解时@ExtendWith(SpringExtension.class)
第二点:使用@Test注解的时导入的包不同
对于Junit4导入的包时org.junit.Test
对于Junit5导入的包时org.junit.jupiter.api.Test
以上就是Spring整合JUnit详解的详细内容,更多关于Spring整合JUnit的资料请关注脚本之家其它相关文章!