Usage and Idioms——Matchers and assertthat

assertThat

一种插入机制,语法如下:

assertThat([value], [matcher statement]);

例如:

assertThat(x, is(3));

assertThat(x, is(not(4)));

assertThat(responseString, either(containsString("color")).or(containsString("colour")));

assertThat(myList, hasItem("3"));

这个语法的优点:

更加易读易写:assertThat 以“主体+动词+对象”的思维形式,比如:"x is 3";而不是像assertEquals一样,采用“动词+对象+主体”的思维形式,比如:“equals 3 x"

易于联合使用:任何匹配描述都可以这样用:not(s)用来否定;either(s).or(t)用来联合;each(s)用来收藏;afterFiveSeconds(s)用来在用户中联合

其中,易读性的优点,可比较下列代码:

assertTrue(responseString.contains("color") || responseString.contains("colour"));
// ==> failure message: 
// java.lang.AssertionError:


assertThat(responseString, anyOf(containsString("color"), containsString("colour")));
// ==> failure message:
// java.lang.AssertionError: 
// Expected: (a string containing "color" or a string containing "colour")
//      got: "Please choose a font"



我们决定在Junit中直接加入 这个API,它是个可扩展且易读的语法,而且它能够实现新功能。原有的插入语法永远不会过时,开发们还是会继续用assertEquals, assertTrue等等。assertThat语法的第二个参数是Matcher,通过静态导入的方式使程序包含我们想用的Matchers。用法如下:

import static org.hamcrest.CoreMatchers.is;
或者
import static org.hamcrest.CoreMatchers.*;

为了兼容更多的可能的matchers,我们决定加入来自hamcrest-coreHamcrest project的类,第三方类被加入JUnit这还是第一次 。
JUnit一般自带几个matchers , 定义在org.hamcrest.CoreMatchersorg.junit.matchers.JUnitMatchers 。
为了应用更多,请参考下载完整的hamcrest 包:

对于如何比较字符串和数组以及显示他们的具体区别,JUnit给予了特殊支持。虽然这个还不能用assertThat来实现,但我们希望在未来的发布中能加入这两个插入方法。

JUnit Matchers

JUnit includes useful matchers for use with the assertThat method, but they are not currently included in the basic CoreMatchers class from hamcrest.

Hamcrest CoreMatchers

Useful Hamcrest CoreMatchers are included in the JUnit distribution

Thirdparty Matchers


Other, potentially Matchers out there include



 


原文地址:https://www.cnblogs.com/insist8089/p/6396939.html