首页 > 编程知识 正文

java基础教程第三版课后答案,java predicate类

时间:2023-05-03 23:47:38 阅读:62039 作者:4311

JUnit 4.4与Hamcrest结合使用时,将提供新的断言语法——assertThat。 程序员可以使用assertThat一个断言语句,结合Hamcrest提供的匹配来表达所有测试思想。 我们引入的版本是Junit4.12,因此支持资产热。

assertThat的基本语法如下:

清单1资产评估的基本语法

资产状态([ value ]、[matcher statement];

value是接下来要测试的变量的值;

物理语句是使用Hamcrest匹配项表示的变量前面的期望值的声明,如果value值与物理语句表示的期望值一致,则测试成功,如果不一致,则测试失败。

资产热的优点

优点1 :以前,JUnit使用assertEquals、assertNotSame、assertFalse、assertTrue、assertNotNull、 虽然提供了很多assertion语句(如assertNull ),但现在JUnit所在的一个assertThat可以替换所有assertion语句,因此所有单元测试只能使用一个断言方法

优点2:assertThat使用Hamcrest的Matcher匹配,用户可以使用匹配中规定的匹配标准准确指定满足的条件。 容易阅读,使用起来更灵活。 如清单2所示:

清单2使用匹配项的Matcher与不使用匹配项的比较

//想判断某个字符串s是否包含子字符串“developer”或“Works”

//JUnit 4.4或更早版本:资产真(s.index of (' developer ) )-1||s.indexof ) ' works ' )-1 );

//JUnit 4.4 :

资产热(s,anyof )连续性字符串)、连续性字符串(s,works ) );

//匹配子anyOf表示满足任何条件都成立,类似于逻辑或“|”,匹配子containsString指示是否包含参数

//字符串、文章接下来将具体介绍匹配代码

优点3 )3:assertThat不再像assertEquals那样使用难以理解的“称为来宾主机”语法模式(例如assertequals(3,x ); 相反,assertThat使用的语法模式类似于“主谓宾”。 例如assertthat(x,is ) )3); 时,代码会更直观、更容易阅读。

优点4 :将这些Matcher匹配组合起来使用,可以达到更多的目的。 如清单3所示:

清单3合并3 Matcher匹配项

//联合匹配not和equalTo表示“不相等”

资产评估(something,not ) equalto ) (开发人员) );

//联合匹配not和containsString表示“不包含子字符串”

资产热(something,not ) containsstring ) (works );

//联合匹配anyOf和containsString表示“包括一个子串”

资产热(something,anyof ) containsstring (字符串)、containsstring (字符串)、works (工作) );

优点5 :错误信息更清晰、可读、有说明性(说明性) )。

在JUnit 4.4之前的版本中,缺省情况下发生错误时不会出现以下附加提示:

资产真(s.index of (开发人员) )-1||s.indexof () works )-1 );

如果断言错误,则只会抛出无用的错误消息,如JUnit.framework.assertionfailederror:null。

要打印在发生错误时有用的提示信息,程序员必须单独手动编写,如下所示

资产真' Expectedastringcontaining ' developer ' or ' works ',

s.index of (开发人员)-1||s.indexof ) (工作)-1 );

非常不方便,需要额外的代码。

JUnit 4.4自动提供默认可读的说明信息,如清单4所示。

清单4 JUnit 4.4缺省情况下显示一些说明性的错误消息

String s='hello world!

";

assertThat( s, anyOf( containsString("developer"), containsString("Works") ) );

// 如果出错后,系统会自动抛出以下提示信息:

java.lang.AssertionError:

Expected: (a string containing "developer" or a string containing "Works")

got: "hello world!"

如何使用 assertThat

JUnit 4.4 自带了一些 Hamcrest 的匹配符 Matcher,但是只有有限的几个,在类 org.hamcrest.CoreMatchers 中定义,要想使用他们,必须导入包 org.hamcrest.CoreMatchers.*。

清单 5 列举了大部分 assertThat 的使用例子:

字符相关匹配符

/**equalTo匹配符断言被测的testedValue等于expectedValue,

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

*/

assertThat(testedValue, equalTo(expectedValue));

/**equalToIgnoringCase匹配符断言被测的字符串testedString

*在忽略大小写的情况下等于expectedString

*/

assertThat(testedString, equalToIgnoringCase(expectedString));

/**equalToIgnoringWhiteSpace匹配符断言被测的字符串testedString

*在忽略头尾的任意个空格的情况下等于expectedString,

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

*/

assertThat(testedString, equalToIgnoringWhiteSpace(expectedString);

/**containsString匹配符断言被测的字符串testedString包含子字符串subString**/

assertThat(testedString, containsString(subString) );

/**endsWith匹配符断言被测的字符串testedString以子字符串suffix结尾*/

assertThat(testedString, endsWith(suffix));

/**startsWith匹配符断言被测的字符串testedString以子字符串prefix开始*/

assertThat(testedString, startsWith(prefix));

一般匹配符

/**nullValue()匹配符断言被测object的值为null*/

assertThat(object,nullValue());

/**notNullValue()匹配符断言被测object的值不为null*/

assertThat(object,notNullValue());

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

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

/**is匹配符简写应用之一,is(equalTo(x))的简写,断言testedValue等于expectedValue*/

assertThat(testedValue, is(expectedValue));

/**is匹配符简写应用之二,is(instanceOf(SomeClass.class))的简写,

*断言testedObject为Cheddar的实例

*/

assertThat(testedObject, is(Cheddar.class));

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

assertThat(testedString, not(expectedString));

/**allOf匹配符断言符合所有条件,相当于“与”(&&)*/

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

/**anyOf匹配符断言符合条件之一,相当于“或”(||)*/

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

数值相关匹配符

/**closeTo匹配符断言被测的浮点型数testedDouble在20.0¡À0.5范围之内*/

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

/**greaterThan匹配符断言被测的数值testedNumber大于16.0*/

assertThat(testedNumber, greaterThan(16.0));

/** lessThan匹配符断言被测的数值testedNumber小于16.0*/

assertThat(testedNumber, lessThan (16.0));

/** greaterThanOrEqualTo匹配符断言被测的数值testedNumber大于等于16.0*/

assertThat(testedNumber, greaterThanOrEqualTo (16.0));

/** lessThanOrEqualTo匹配符断言被测的testedNumber小于等于16.0*/

assertThat(testedNumber, lessThanOrEqualTo (16.0));

集合相关匹配符

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

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

/**hasItem匹配符表明被测的迭代对象iterableObject含有元素element项则测试通过*/

assertThat(iterableObject, hasItem (element));

/** hasKey匹配符断言被测的Map对象mapObject含有键值“key”*/

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

/** hasValue匹配符断言被测的Map对象mapObject含有元素值value*/

assertThat(mapObject, hasValue(value));

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。