Junit是Java编程语言的单元测试框架,用于编写单元测试代码。随着Junit5的普及,它与Junit4有什么不同。
JDK支持
Junit4需要Java5+版本
Junit5需要Java8+版本
依赖MavenJunit4不区分模块,只有一个jar:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope></dependency>
Junit5分为三个模块:
- junit-jupiter: junit5核心模块为junit5提供了新的编程模型。在junit-platform上运行的测试引擎。
- junit-platform:平台功能模块,其他测试引擎可以基于此平台访问junit。
- junit-vintage:用于与junit3、junit4兼容的测试引擎。
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>test</scope></dependency>
springboot版依赖于
spring-boot 2.2版本之前默认使用Junit4;Junit5用于2.2后的版本。
注解区别Junit5
Junit4
说明
@Test
@Test
注释法是一种测试方法。和 JUnit 4 相同。
@BeforeAll
@BeforeClass
在当前类别中,所有注释的(静态)方法都将被注解 @Test 方法前执行一次。
@BeforeEach
@Before
当前类别中的每一种注释方法都会被注解 @Test 方法前执行。
@AfterEach
@After
当前类别中的每一种注释方法都会被注解 @Test 执行后的方法。
@AfterAll
@AfterClass
在当前类别中,所有注释的(静态)方法都将被注解 @Test 方法后执行一次。
@Disabled
@Ignore
被注解的方法不会执行(跳过),但会报告已执行。
Junit4中的@Test是import org.junit.Test;
Junit5中的@Test是import org.junit.jupiter.api.Test;
断言标准断言方法
说明
assertEquals(expected, actual)
如果 expected 不等于 actual ,断言失败。
assertFalse(booleanExpression)
如果 booleanExpression 不是 false ,断言失败。
assertNull(actual)
如果 actual 不是 null ,断言失败。
assertNotNull(actual)
如果 actual 是 null ,断言失败。
assertTrue(booleanExpression)
如果 booleanExpression 不是 true ,断言失败。
Junit4中断的内容位于org.junit.Assert类;
Junit5中断的内容位于org.junit.jupiter.api.Assertions;
// junit4org.junit.Assert.assertEquals(1.0, 1.0);// junit5org.junit.jupiter.api.Assertions.assertEquals(1.0, 1.0);
测试手法
重复测试:
/** * junit4需要手动newnit4 repeatTest */@Testpublic void repeattest4(){ TestSuite suite = new TestSuite(); // 10表示重复测试次数 suite.addTest(new RepeatedTest(new TestSample(), 10));}/** * 通过使用@Repeatedtest注解法,junit5指定所需的重复次数 */@org.junit.jupiter.api.RepeatedTest(10)public void repeattest5(){ // todo...}
写法差异
Junit5:
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.assertEquals;public class DemoTest { @Test void test() { assertEquals(2, 1); }}
Junit4:
package tech.pdai.junit4;import org.junit.Test;import static org.junit.Assert.assertEquals;public class HelloWorldTest { @Test public void DemoTest() { assertEquals(2, 1); }
可见Junit5写法除了导入包不一致外,还支持非public方法测试。
小结以上是对一些常见用法差异的总结。Junit5在Junit4的基础上增加了一些新的特性。增加了基于lambda的支持,简化了一些测试技术的编写,如重复测试、参数测试等。Junit5配合mockito等测试框架,使用体验不错。