1.说明
Junit5是单元测试框架Juint4的升级版,
与Junit4框架有很大的不同,
它由三个模块组成:
JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit5整体架构图如下:
1.1.Junit Platform
这个模块是Junit提供的平台功能模块,
不仅支持Junit自带的测试引擎,
只要实现了Junit平台引擎的接口,
任何测试框架都可以在JUnit Platform上运行,
意味着Junit5将会有着很强的拓展性。
1.2.Junit Jupiter
这个模块是Junit5的核心,
是一个基于Junit Platform引擎的实现,
它包含许多丰富的新特性来使得自动化测试更加方便和强大。
1.3.Junit Vintage
这个模块是兼容Junit3、Junit4版本的测试引擎,
使得旧版本的自动化测试也可以在Junit5下正常运行。
2.引入Pom依赖
在pom.xml引入Junit5的依赖:
org.junit.jupiter
junit-jupiter
5.8.0
test
如果只使用Junit5测试框架,
只需要依赖Junit Platform和Junit Jupiter即可,
而上面的junit-jupiter已经引入了必须的依赖。
3.新建测试类
在src/test/java目录下,
新建Math的测试类MathTest,
一般测试类与被测试类包路径相同,
然后在类名后面添加Test作为测试类:
java.lang.MathTest
由于java.lang是禁止使用的包名,
所以在包路径前面添加test:
test.java.lang.MathTest
4.新建测试方法
新建测试方法testMathMinSuccess()和testMathMaxSuccess(),
用于测试Math.min()和max()的功能,
注意使用Junit5提供的注解@Test,
标识这是一个测试方法,
注解@DisplayName用于指定单元测试的名称,
否则默认使用的是单元测试方法的名称,
另外测试方法一般以test开头,
而且必须是public void的:
package test.java.lang;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class MathTest {
@Test
public void testMathMinSuccess() {
int a = 1;
int b = 9;
int min = Math.min(a, b);
Assertions.assertEquals(a, min);
}
@Test
@DisplayName("测试Math的max方法")
public void testMathMaxSuccess() {
int a = 1;
int b = 9;
int max = Math.max(a, b);
Assertions.assertEquals(b, max);
}
}
注意用到的类都是org.junit.jupiter.api包下的。
5.断言判断结果
在上面的测试用例中,
使用Assertions断言,
判断Math.min返回的结果min,
是不是期望的最小值a:
Assert.assertEquals(a, min);
如果判断成功,则测试用例通过,
如果判断失败,则测试用例抛出异常,
表示Math.min的返回值超出预期,
可能代码功能存在问题,
需要开发介入定位问题。
Junit5使用了新的断言类:
org.junit.jupiter.api.Assertions。
相比Junit4的Assert断言类多了许多新的功能,
并且大量方法支持Java8的Lambda表达式,
注意不要把Junit5和Junit4中的类混在一起使用。
6.运行测试类
在Eclipse中运行测试类,
右键测试类MathTest -> Run As -> Junit Test,
或者使用快捷键:
Alt + Shift + X, T
MathTest单元测试执行结果如下:
如果测试类中存在多个测试方法,
上面的命令会执行所有测试方法,
如果只期望执行某个测试方法,
可以选中方法名称后,右键执行,
即可单独执行这个方法,
调试测试用例的时候很常用。
7.参考文章
JUnit 5 User Guide
Junit5 Github