更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!

原文链接:http://www.cnblogs.com/zishi/p/6868495.html

 
JUnit 5是下一代JUnit。 目标是为JVM上的开发人员端测试创建一个最新的基础。 这包括专注于Java 8及更高版本,以及启用许多不同风格的测试。
 
 
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
与以前的JUnit版本不同,JUnit 5由三个不同的子项目组成
 
支持的Java版本
JUnit 5在运行时需要Java 8。 但是,仍然可以测试使用以前版本的JDK编译的代码。
 
JUnit平台作为在JVM上启动测试框架的基础。 它还定义了用于开发在平台上运行的测试框架的TestEngine API。 此外,该平台提供了一个控制台启动器,从命令行启动平台,为Gradle和Maven构建插件以及基于JUnit 4的Runner,用于在平台上运行任何TestEngine。
 
JUnit Jupiter是用于在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合.Jupiter子项目提供了一个用于在平台上运行基于Jupiter的测试的TestEngine。
 
JUnit Vintage提供了一个用于在平台上运行JUnit 3和JUnit 4的测试的TestEngine。
 
JUnit 5团队于2017年4月1日发布了里程碑4,目前正在开发额外的里程碑,最终发布GA版本(详见路线图Roadmap)。
 
JUnit Jupiter带有许多JUnit 4的断言方法,并添加了一些可以与Java 8 lambdas一起使用的方法。
 
所有JUnit Jupiter断言是org.junit.jupiter.Assertions类中的静态方法.
新特性是分组断言,这在以前Junit4是不被允许的。
以下是断言的Demo:
 
import static java.time.Duration.ofMillis;
import static java.time.Duration.ofMinutes;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTimeout;
import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively;
import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; class AssertionsDemo { @Test
void standardAssertions() {
assertEquals(2, 2);
assertEquals(4, 4, "The optional assertion message is now the last parameter.");
assertTrue(2 == 2, () -> "Assertion messages can be lazily evaluated -- "
+ "to avoid constructing complex messages unnecessarily.");
} @Test
void groupedAssertions() {
//分组断言:在一个分组断言中,所有断言都会被执行,并且任何失败的断言也会一起被报告
assertAll("address",
() -> assertEquals("John", address.getFirstName()),
() -> assertEquals("User", address.getLastName())
);
} @Test
void exceptionTesting() {
Throwable exception = assertThrows(IllegalArgumentException.class, () -> {
throw new IllegalArgumentException("a message");
});
assertEquals("a message", exception.getMessage());
}
@Test
void timeoutNotExceeded() {
// 下面的断言成功
assertTimeout(ofMinutes(2), () -> {
// 执行任务只需不到2分钟
});
} @Test
void timeoutNotExceededWithResult() {
// 以下断言成功,并返回所提供的对象
String actualResult = assertTimeout(ofMinutes(2), () -> {
return "a result";
});
assertEquals("a result", actualResult);
} @Test
void timeoutNotExceededWithMethod() {
// 以下断言调用方法参照并返回一个对象
String actualGreeting = assertTimeout(ofMinutes(2), AssertionsDemo::greeting);
assertEquals("hello world!", actualGreeting);
}
@Test
void timeoutExceeded() {
// 下面的断言失败,类似的错误信息:
// execution exceeded timeout of 10 ms by 91 ms
assertTimeout(ofMillis(10), () -> {
// 模拟的任务,需要超过10毫秒
Thread.sleep(100);
});
} @Test
void timeoutExceededWithPreemptiveTermination() {
// 下面的断言失败,类似的错误信息:
// execution timed out after 10 ms
assertTimeoutPreemptively(ofMillis(10), () -> {
// 模拟的任务,需要超过10毫秒
Thread.sleep(100);
});
} private static String greeting() {
return "hello world!";
} }
即使由JUnit Jupiter提供的断言设施对于许多测试场景也是足够的,但有时候需要或需要更多的功率和附加功能,如匹配器。
在这种情况下,JUnit团队建议使用第三方断言库,如AssertJ,Hamcrest,Truth等。因此,开发人员可以自由使用他们选择的断言库。
 
例如,匹配器和流畅的API的组合可用于使断言更具描述性和可读性。 但是,JUnit Jupiter的org.junit.jupiter.Assertions类不提供像JUnit 4的org.junit.Assert类中的assertThat()方法,它接受Hamcrest Matcher。 相反,鼓励开发人员使用第三方断言库提供的匹配器的内置支持。
 
以下示例演示了如何在JUnit Jupiter测试中使用Hamcrest的assertThat()支持。 只要将Hamcrest库添加到类路径中,您可以静态导入assertThat(),is()和equalsTo()等方法,然后在下面的assertWithHamcrestMatcher()方法中使用它们。
Demo:
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat; import org.junit.jupiter.api.Test; class HamcrestAssertionDemo { @Test
void assertWithHamcrestMatcher() {
assertThat(2 + 1, is(equalTo(3)));
} }

附录:参考

 官网首页:http://junit.org/junit5/
 
 作者原创技术文章,转载请注明出处

JUnit5 技术前瞻的更多相关文章

  1. 单元测试系列之六:JUnit5 技术前瞻

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6868495.html   JUnit ...

  2. 单元测试系列:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  3. 单元测试系列:Mock工具Jmockit使用介绍

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...

  4. 单元测试系列之五:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  5. 单元测试系列之十一:Jmockit之mock特性详解

    本文是Jmockit学习过程中,根据官网所列的工具特性进行解读. 1.调用次数约束(Invocation count constraints) 可以通过调用计数约束来指定预期和/或允许匹配给定期望的调 ...

  6. 单元测试系列之十:Sonar 常用代码规则整理(二)

    摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...

  7. 单元测试系列之九:Sonar 常用代码规则整理(一)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...

  8. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  9. 单元测试系列之一:如何使用JUnit、JaCoCo和EclEmma提高单元测试覆盖率

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!   原文链接:http://www.cnblogs.com/zishi/p/6726664.html -----如 ...

随机推荐

  1. position:absolute 的深入探讨

    position:absolute 参考谁进行定位的问题.之前大家可能会认为如果absolute元素的父级(祖父)元素没有设置position属性的时候,该元素的position:absolute会参 ...

  2. jQuery判断Dom对象是否存在

    我们时常要检测一个DOM对象是否为空. var $jObject = $('#btn'); alert($jObject ); 我们会发现,$jObject 永远不会为空.为什么呢?$ 方法查找对象, ...

  3. Sass和Compass入门

    一.前言 1.Sass是什么? Sass可以简化你的Css工作流,并可以使你的Css的扩展和维护工作变的更加容易!例如,曾几时何,因为客户的需求的变更,你必须不断的通过查找和替换来更改一个像素值,或者 ...

  4. 【经验分享】安装VirtualBox的时候遇到的问题

    错误代码: Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works. ...

  5. html button 点击链接

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. debian 9 双显卡安装NVIDIA显卡驱动

    最近用debian,给debian装n卡驱动折腾了好几天了,主要还是网络不好,官方wiki的方法下载经常卡死..摸索了几天感觉已经摸到了头绪,决定写下来供大家参考参考 先提供单显卡NVIDIA驱动的安 ...

  7. parse_str() 函数把查询字符串解析到变量中。

    定义和用法 parse_str() 函数把查询字符串解析到变量中. 注释:如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量. 注释:php.ini 文件中的 magic_quo ...

  8. DOS基本命令(基本部分)

    一.cls(clear screen的简写) 命令作用:清屏屏幕 详细介绍:屏幕显示的所有字符信息都是存放在一个屏幕缓冲区中,cls命令的作用是清除屏幕上的文字,并将该缓冲区清空. 二.dir(dir ...

  9. asp.net -mvc框架复习(9)-实现用户登录控制器和视图的编写并调试

    1.编写控制器 三个步骤: [1]获取数据 [2]业务处理 [3]返回数据 using System;using System.Collections.Generic;using System.Lin ...

  10. Spring测试框架JUnit4.4 还蛮详细的

    TestContext 可以运行在 JUnit 3.8.JUnit 4.4.TestNG 等测试框架下. Spring的版本2.5+JUnit4.4+log4j1.2.12 @RunWith(Spri ...