JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
其中
JUnit平台,其主要作用是在JVM上启动测试框架。它定义了一个抽象的TestEngineAPI来定义运行在平台上的测试框架,同时还支持通过命令行、Gradle和Maven来运行平台。
JUnit Jupiter,包含了JUnit5最新的编程模型和扩展机制。
JUnit Vintage,允许在平台上运行JUnit3和JUnit4的测试用例。
JUnit5对Java运行环境的最低要求是Java8,同时也兼容测试旧版本JDK编译出来的代码。
完整依赖:
org.junit.platform
junit-platform-launcher
1.5.2
test
org.junit.jupiter
junit-jupiter-engine
5.5.2
test
org.junit.vintage
junit-vintage-engine
5.5.2
test
2018年10月24日Maven 3.6.0发布,Maven才正式原生支持Junit5。在这个版本中,Maven团队一并发布了 Maven Surefire Plugin 2.22.0 和Maven Failsafe plugin 2.22.0,进而解决了对Junit5的支持问题。
在此之前,为了能在Maven中运行Junit5的测试用例,需要为 Maven Surefire plugin额外提供一个Junit5团队提供的Junit Provider。
org.apache.maven.plugins
maven-surefire-plugin
2.19.1
org.junit.platform
junit-platform-surefire-provider
1.1.0
org.junit.jupiter
junit-jupiter-engine
5.1.0
如果将Maven升级到3.6.0及以上版本,那么junit-platform-surefire-provider这个依赖就不需要了。
// UserService类
@Service
public class UserServiceImpl implements UserService {
@Override
public void printName() {
System.out.println("UserServiceImpl");
}
}
1.springboot2.2.0之前,spring-boot-starter-test默认支持的是junit4;
我这里的测试环境:spring boot2.1.0+maven3.5.4+jdk8+idea2019.1.3
1.1junit4的测试:
需要的的依赖:
org.springframework.boot
spring-boot-starter-test
test
测试类举例:
@RunWith(SpringRunner.class)
@SpringBootTest // 如果启动报错,则需要指定启动类的class
public class Springboot159ApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads() throws SQLException {
userService.printName();
}
}
1.2junit5的测试:
需要的的依赖:
org.springframework.boot
spring-boot-starter-test
test
junit
junit
org.junit.jupiter
junit-jupiter-engine
${junit-jupiter.version}
test
org.junit.platform
junit-platform-launcher
1.3.1
test
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-surefire-plugin
2.22.0
测试类举例:
import com.ysy.HelloDemo;
import com.ysy.service.UserService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* Created by Administrator on 2020/1/31 14:07
*/
@SpringBootTest(classes= HelloDemo.class)
//@ExtendWith(SpringExtension.class)
public class Test2 {
@Autowired
UserService userService;
@DisplayName("Test Spring @Autowired Integration")
@Test //注意这里可以没有public
void testGet() {
userService.printName();
//assertEquals("UserServiceImpl", userService.printName());
}
}
2.springboot2.2.0之后,spring-boot-starter-test默认支持的是junit5;
我这里的测试环境:spring boot2.2.0+maven3.5.4+jdk8+idea2019.1.3
2.1junit4的测试:
需要的的依赖:
org.springframework.boot
spring-boot-starter-test
test
org.junit.jupiter
junit-jupiter
org.junit.vintage
junit-vintage-engine
org.mockito
mockito-junit-jupiter
junit
junit
测试类举例:
import com.example.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* Created by Administrator on 2020/1/31 15:03
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class Test2 {
@Autowired
UserService userService;
@Test //注意 public
public void contextLoads() {
userService.printName();
}
}
2.2junit5的测试:
需要的的依赖:
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin
测试类举例:
import com.example.service.UserService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class DemoYsy2ApplicationTests {
@Autowired
UserService userService;
@DisplayName("Test Spring @Autowired Integration")
@Test
void contextLoads() {
userService.printName();
}
}
3.两个版本的依赖声明对比:
2.1.0的spring-boot-dependencies
4.12
5.3.1
junit
junit
${junit.version}
org.junit
junit-bom
${junit-jupiter.version}
pom
import
org.mockito
mockito-junit-jupiter
${mockito.version}
2.22.1
maven-surefire-plugin
${maven-surefire-plugin.version}
2.2.0的spring-boot-dependencies
4.12
5.5.2
junit
junit
${junit.version}
org.junit
junit-bom
${junit-jupiter.version}
pom
import
org.mockito
mockito-junit-jupiter
${mockito.version}
maven-surefire-plugin
${maven-surefire-plugin.version}
附加:
版本新特性:
2.1.0版本新特性:https://www.xttblog.com/?p=3299
2.2.0版本新特性:https://zhuanlan.zhihu.com/p/95545254
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes
junit5支持情况:https://cloud.tencent.com/developer/article/1522208
注意点:
1.Junit4中为org.junit.Test,而Junit5中为org.junit.jupiter.api.Test
2.maven3.6.3,截止目前(2020年1月31日17:05:24)
在IDEA使用会有点问题;建议使用之前的版本
后话:JUnit5和Mockito将是以后的单元测试标配;
上面只是简单的把依赖关系说明了一下,具体的测试使用还待学习。。
参考:
https://www.jianshu.com/p/0eb2dfea55b4