断言:预期与实际结果的判断 Assert

JUnit4.4引入了新的断言语法‘assertThat’,使得程序员在编写单元测试的assert语句时,可以有更强的可读性,而且更加灵活。

基本语法:assertThat([value],[matcher statement]);
value是接下来想要测试的变量值,matcher statement是使用Hamcrest匹配符来表达对前面变量所期望的值的声明,如果value和matcher statement所表达的期望值相符,测试成功,否则失败

建议:使用时静态导入,减少测试代码编写的工作量,

如: import static org.junit.Assert.*;import static org.hamcrest.Matchers.*;

优点

相比较其他断言语句,assertThat具有如下优点:
1.assertThat可以替代所有assert语句,使用编写测试用例变的简单,代码风格变得统一,测试代码也更容易维护
2.使用了类似的“主谓宾”的语法模式,代码易读// JUnit 4.4 以前的“主谓宾”结构语句assertEquals(3 , x);// JUnit 4.4assertThat(x , is(3));
3.可以和Matcher匹配符联合起来达到更多目的,使用灵活// 想要判断某个字符串s是否含有个子字符串“developer”或“Worker”中间的一个// JUnit 4.4 以前版本:assertTrue(s.indexOf("developer")>-1 || s.indexOf("Worker")>-1);// JUnit 4.4 匹配符anyOf 表示任何一个条件满足则成立,类似于逻辑或 “||”,匹配符containsString 表示是否含有参数子字符串assertThat(s , anyOf(containsString("developer"),containsString("Worker")));// 联合匹配符not和equalTo表示“不等于”assertThat(something , not(equqlTt("developer")));// 联合匹配符not和containsString表示“不包含子字符串”assertThat(something , not(containsString("Worker")));// 联合匹配符anyOf和containsString表示“包含任意一个子字符串”assertThat(something , anyOf(containsString("developer") , containsString("Worker")));

一般匹配符

// allOf匹配符表明如果记下来的所有条件必须都成立测试才能通过,相当于“与”(&&)
assertThat( testedNumber , allOf( greaterThan(8) , lessThan(16) ));
// anyOf匹配符表名如果接下来的条件只要有一个成立,则测试通过,相当于“或”(||)
assertThat( testedNumber , anyOf( greaterThan(16) , lessThan(8) ));
// anything匹配符表名无论什么条件,永远为true
assertThat( testedNumber , anything() );
// is匹配符表名如果前面待测的object等于后面的object,则测试通过
assertThat( testedString , is( "developerWorks" ));
// not匹配符和is匹配符正好相反,表明前面待测的object不等于后面给出的object,则测试通过
assertThat( testedString , not( "developerWorkes" ) );

字符串相关匹配符

// containsString匹配符表明如果测试的字符串testedString包含子字符串“developerWorks”,则测试通过
assertThat( testedString , containsString( "developerWorks" ) );
// endsWith匹配符表明如果测试的字符串testedString以子字符串“developerWorks”结尾,则测试通过
assertThat( testedString , endsWith( "developerWorks" ) );
// startsWith匹配符表明如果测试的字符串testedString以子字符串“developerWorks”开始,则测试通过
assertThat( testedString , startsWith( "developerWorks" ) );
// equalTo匹配符表明如果测试的testedValue等于expectedValue,则测试通过,equalTo可以测试数值之间,字符串之间和对象之间是否相等,相当于Object的equals方法
assertThat( testedString , equalTo( expectedValue ));
// equalToIgnoringCase匹配符表明如果测试的字符串testedString在忽略大小写的情况下等于“developerWorks”,则测试通过
assertThat( testedString , equalToIgnoringCase( “developerWorks” ) );
// equalToIgnoringWhiteCase匹配符表明如果测试的字符串testedString在忽略头尾的任意空格的情况下等于“developerWorks”,则测试通过,注意:字符串中间的空格不能被忽略
assertThat( testedString , equalToIgnoringWhiteCase( “developerWorks” ) );

数值相关匹配符

// 测试的浮点型数testedDouble在20±0.5
assertThat( testedDouble , closeTo( 20. , 0.5 ));
// 测试的浮点型数testedDouble > 16.0
assertThat( testedDouble , greaterThan( 16.0 ));
// 测试的浮点型数testedDouble < 16.0
assertThat( testedDouble , lessThan( 16.0 ));
// 测试的浮点型数testedDouble >= 16.0
assertThat( testedDouble , greaterThanOrEqualTo( 16.0 ));
// 测试的浮点型数testedDouble <= 16.0
assertThat( testedDouble , lessThanOrEqualTo( 16.0 ));

collection相关匹配符

// hasEntry匹配符表明如果测试的Map对象mapObject含有一个键值为“key”对应的元素值为“value”的Entry,则测试通过
assertThat( mapObject , hasEntry( "key" , "value" ) );
// hasItem匹配符表明如果测试的迭代对象iterableObject含有元素“elemenet”项,则测试通过
assertThat( iterableObject , hasItem( “element” ) );
// hasKey匹配符表明测试的Map对象mapObject含有键值"key"则测试通过
assertThat( mapObject , hasKey( "key" ) );
// hasValue匹配符表明如果测试的Map对象mapObject含有元素值“value”,则测试通过
assertThat( mapObject , hasValue( "value" ) );

JUnit4.4 新特性 assertThat 使用详解相关推荐

  1. java lambda表达式详解_Java8新特性Lambda表达式详解

    课程目标: 通过本课程的学习,详细掌握Java8新特性之Lambda表达式: 适用人群:有Java基础的开发人员: 课程概述:从Java 8出现以来lambda是最重要的特性之一,它可以让我们用简洁流 ...

  2. 【java8新特性】——Optional详解(三)

    一.简介 Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null ...

  3. H5的新特性及API详解(很惊人)

    H5的新特性及API详解(很惊人) 2017-01-20 17:00 4057人阅读 评论(0) 收藏 举报  分类: h5(11)  js函数(64)  js技巧(15)  版权声明:本文为博主原创 ...

  4. 显微镜下的webpack4的新特性:mode详解

    webpack4支持的一个新特性就是zero配置,不需要config,也可以打包,这对于懒癌患者很有诱惑力,但是这也意味着我们不清楚零配置发生了写什么,也不知道打包出来的文件是否符合我们的心意,全部都 ...

  5. jdk8新特性 lambda表达式详解

    本文主要讲到的内容有: 一- 前言 二- 背景 三- lambda表达式的语法 四- Lambda程序例子 4-1 Runnable Lambda 4-2 Comparator Lambda 4-3 ...

  6. C++11中的一些新特性以及代码详解

    C++11新特性 auto decltype 追踪返回类型 类内成员初始化 列表初始化 基于范围的for循环 静态断言 noexcept修饰符 强类型枚举 常量表达式 原生字符串字面值 继承控制 fi ...

  7. Java8新特性Stream流详解

    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...

  8. C++11新特性——λ(lambda)表达式详解

    C++11新特性--λ(lambda)表达式 C++11中引入了λ表达式,它可以用来定义一个内联(inline)的函数,作为一个本地的对象或者一个参数.有了λ表达式,我们可以很方便的使用stl标准库. ...

  9. springboot 优雅停机_Spring Boot 2.3 新特性优雅停机详解

    什么是优雅停机 先来一段简单的代码,如下: @RestControllerpublic class DemoController { @GetMapping("/demo") pu ...

最新文章

  1. MySQL 的“root”用户修改密码
  2. 简单python画圣诞树图片-python圣诞树代码
  3. 数据产品通用复合指标查询计算的实践
  4. 设置SAP登录后的背景图片(很有意思)
  5. 东华之旅vs第一次坐飞机经历2018-06-10
  6. php定义常量、判断有没有被定义、预定义常量、显示所有常量
  7. 14岁考入北大少年班,如今节衣缩食上课穿胶鞋,却慷慨资助贫困生
  8. java多态 重写(override)的调用优先级
  9. Java 生成二维码实战
  10. 学制两年的计算机考研院校,研究生学制三年合适还是两年实用
  11. SEO原创助手-SEO免费原创助手工具自动分析网站排名
  12. RISC-V GCC工具链介绍
  13. 怎么释放mysql连接_数据库连接释放问题
  14. Wifi测速上下行不一致
  15. 论文浅尝 | 基于注意力图卷积神经网络的依存驱动关系抽取
  16. 华硕电脑 大白菜安装iso原版win7
  17. 《管理学》第九章 沟通
  18. 区间DP小结(附经典例题)
  19. 无需上架,接入穿山甲广告和广点通广告 sdk
  20. 阿里开源的诊断神器(Arthas)自带IDEA插件真香!

热门文章

  1. wsus下游服务器状态,WSUS下游服务器连接不上上游服务器
  2. c3p0连接池和druid连接池的使用
  3. dom元素滚动条高度 js_javascript 获取滚动条高度+常用js页面宽度与高度[转]
  4. bill-tomcat开发打包安装
  5. 浪潮之巅第三章 — “水果”公司的复兴 (乔布斯和苹果公司)
  6. GitLab实现持续集成
  7. 刚毕业女大学生竟和“禽兽”做出这种事
  8. upc-叫你一声你敢答应吗(排列组合)
  9. 前端工程师·的好习惯_质量检查工程师应避免的7个不良习惯
  10. 小米Note全网通支持7模19频:先发标准版