写点什么

Hamcrest

用户头像
insight
关注
发布于: 2021 年 03 月 16 日
Hamcrest

Hamcrest 是一个用于编写匹配对象的框架,允许以声明方式定义“匹配规则”。JUnit 4 中引入了 Hamcrest ,方便我们可以用各种语义化的方式编写断言,因此建议放弃掉 JUnit 提供的各种 assertXXX 方法,使用 Hamcrest 的 assertThat 方法。


第一个 Hamcrest 测试

public class HamcrestTest {    @Test    public void testAssertThat() {        int result = 1;        assertThat(result,equalTo(1));        assertThat(result,not(equalTo(3)));        assertThat(result,not(is(3)));    }}
复制代码

在第二个参数中,我们可以用语义化的方式声明各种复杂的断言方法。


Hamcrest 的常用方法

一. 字符相关匹配符

1. equalTo:

assertThat(testedValue, equalTo(expectedValue));

断言被测的 testedValue 等于 expectedValue,equalTo 可以断言数值之间,字符串之间和对象之间是否相等,相当于 Object 的 equals 方法

2. equalToIgnoringCase:

assertThat(testedString, equalToIgnoringCase(expectedString));

断言被测的字符串 testedString 在忽略大小写的情况下等于 expectedString

3. equalToIgnoringWhiteSpace:

assertThat(testedString, equalToIgnoringWhiteSpace(expectedString);

断言被测的字符串 testedString 在忽略头尾的任意个空格的情况下等于 expectedString

(注意:字符串中的空格不能被忽略)

4. containsString:

assertThat(testedString, containsString(subString) );

断言被测的字符串 testedString 包含子字符串 subString

5. endsWith:

assertThat(testedString, endsWith(suffix));

断言被测的字符串 testedString 以子字符串 suffix 结尾

6. startsWith:

assertThat(testedString, startsWith(prefix));

断言被测的字符串 testedString 以子字符串 prefix 开始

二. 一般匹配符

  1. nullValue():

assertThat(object,nullValue());

断言被测 object 的值为 null*/


  1. notNullValue():

assertThat(object,notNullValue());

断言被测 object 的值不为 null*/


  1. is:

assertThat(testedString, is(equalTo(expectedValue)));

断言被测的 object 等于后面给出匹配表达式

is 匹配符简写应用之一:

 assertThat(testedValue, is(expectedValue));    is(equalTo(x))的简写,断言testedValue等于expectedValue
复制代码

is 匹配符简写应用之二:

 assertThat(testedObject, is(Cheddar.class));    is(instanceOf(SomeClass.class))的简写,断言testedObject为Cheddar的实例
复制代码
  1. not:

assertThat(testedString, not(expectedString));

与 is 匹配符正好相反,断言被测的 object 不等于后面给出的 object


  1. allOf:

assertThat(testedNumber, allOf( greaterThan(8), lessThan(16) ) );

断言符合所有条件,相当于“与”(&&)


  1. anyOf:

assertThat(testedNumber, anyOf( greaterThan(16), lessThan(8) ) );

断言符合条件之一,相当于“或”(||)


三. 数值相关匹配符


  1. closeTo:

assertThat(testedDouble, closeTo( 20.0, 0.5 ));

断言被测的浮点型数 testedDouble 在 20.0-0.5 ~ 20.0+0.5 范围之内


  1. greaterThan:

assertThat(testedNumber, greaterThan(16.0));

断言被测的数值 testedNumber 大于 16.0


  1. lessThan:

assertThat(testedNumber, lessThan (16.0));

断言被测的数值 testedNumber 小于 16.0


  1. greaterThanOrEqualTo:

assertThat(testedNumber, greaterThanOrEqualTo (16.0));

断言被测的数值 testedNumber 大于等于 16.0


  1. lessThanOrEqualTo:

assertThat(testedNumber, lessThanOrEqualTo (16.0));

断言被测的 testedNumber 小于等于 16.0


四. 集合相关匹配符


  1. hasEntry:

assertThat(mapObject, hasEntry("key", "value" ) );

断言被测的 Map 对象 mapObject 含有一个键值为"key"对应元素值为"value"的 Entry 项


  1. hasItem:

assertThat(iterableObject, hasItem (element));

表明被测的迭代对象 iterableObject 含有元素 element 项则测试通过


  1. hasKey:

assertThat(mapObject, hasKey ("key"));

断言被测的 Map 对象 mapObject 含有键值“key”


  1. hasValue:

assertThat(mapObject, hasValue(value));

断言被测的 Map 对象 mapObject 含有元素值 value


用户头像

insight

关注

不要混淆行动与进展、忙碌与多产。 2018.11.17 加入

永远都是初学者

评论

发布
暂无评论
Hamcrest