Hamcrest是一个为了测试为目的,能组合成灵活表达式的匹配器类库。用于编断言的框架,使用这个框架编写断言,提高可读性及开发测试的效率,提供了大量“匹配器”方法,每个匹配器用于执行特定的比较操作。可扩展性强,支持多语言,JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活。

前者使用Junit的 断言,后者使用 Hamcrest的断言。

@Test
@DisplayName("junt断言")
public void test_with_junit_assert() {
int expected = 51;
int actual = 51;

assertEquals(" 失败-参数不一致", expected, actual);
}

@Test
@DisplayName("hamcrest断言")
public void test_with_hamcrest_assertThat() {
int expected = 51;
int actual = 51;

assertThat("失败-参数不一致!", actual, equalTo(expected));
}

两者差别:
1. 参数顺序。两者的expected 和 actual 前后顺序是相反的。
2. Hamcrest 直接使用对象。它的语法更符合函数式编程的风格。
junit 总是获取值后再比较,因为比较的是简单的值,因此被比较的放在前面更符合习惯。
Hamcrest 是直接对测试结果的对象进行一些更复杂的匹配。

Hamcrest匹配器API

核心:
  anything - 总是匹配,如果你不关心测试下的对象是什么是有用的
  describedAs - 添加一个定制的失败表述装饰器
  is - 改进可读性装饰器 - 见下 “Sugar”
逻辑:
  allOf - 如果所有匹配器都匹配才匹配,像Java里的&&
  anyOf - 如果任何匹配器匹配就匹配,像Java里的||
  not - 如果包装的匹配器不匹配器时匹配,反之亦然
对象:
  equalTo - 测试对象相等使用Object.equals方法
  hasToString - 测试Object.toString方法
  instanceOf, isCompatibleType - 测试类型
  notNullValue, nullValue - 测试null
  sameInstance - 测试对象实例
Beans:
  hasProperty - 测试JavaBeans属性
集合:
  array - 测试一个数组元素test an array’s elements against an array of matchers
  hasEntry, hasKey, hasValue - 测试一个Map包含一个实体,键或者值
  hasItem, hasItems - 测试一个集合包含一个元素
  hasItemInArray - 测试一个数组包含一个元素
数字:
  closeTo - 测试浮点值接近给定的值
  greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 测试次序
文本:
  equalToIgnoringCase - 测试字符串相等忽略大小写
  equalToIgnoringWhiteSpace - 测试字符串忽略空白
  containsString, endsWith, startsWith - 测试字符串匹配


@Test
@DisplayName("hamcrest断言")
public void test_with_hamcrestprice() throws InterruptedException {
Thread.sleep(10000);
driver.findElement(By.id("com.xueqiu.android:id/home_search")).click();
driver.findElement(By.id("com.xueqiu.android:id/search_input_text")).sendKeys("阿里巴巴");
//点击港股
driver.findElement(By.xpath("//*[@text='BABA']")).click();
driver.findElement(By.xpath("//*[@text='股票']")).click();
Thread.sleep(3000 );
double realPrice = Double.parseDouble(driver.findElement(
By.xpath("//*[@text='09988']/../../..//*[@resource-id='com.xueqiu.android:id/current_price']")).getText());
//hamcrest 断言
assertThat("股票价格比对",realPrice,greaterThan(500d));
}
}

Hamcrest 断言框架的更多相关文章

  1. Python BDD自动化测试框架初探

    1. 什么是BDD BDD全称Behavior Driven Development,译作"行为驱动开发",是基于TDD (Test Driven Development 测试驱动 ...

  2. 接口测试框架Requests

    目录 Requests Requests安装 Requests常见接口请求方法构造 请求目标构造 header构造 cookie 构造请求体 Get Query请求 Form请求参数 JSON请求体构 ...

  3. 推荐轻量友好的.NET测试断言工具Shouldly

    Shouldly是一个轻量的断言(Assertion)框架,用于补充.NET框架下的测试工具.Shouldly将焦点放在当断言失败时如何简单精准的给出很好的错误信息. Shouldly在GitHub的 ...

  4. OOM框架AutoMapper基本使用(2)

    出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要 ...

  5. .NET测试断言工具Shouldly

    .NET测试断言工具Shouldly .NET测试 Shouldly在GitHub的开源地址:https://github.com/shouldly/shouldly Shouldly的官方文档:ht ...

  6. 单元测试利器之Jtester

    http://kiral.iteye.com/blog/900975 名词解释: Junit:众所周知的单元测试. 官方网址:http://junit.sourceforge.net/.Junit从4 ...

  7. (转)用JUnit4进行单元测试

    场景:从开始写代码至今,对于单元测试一直没有重视,但是也厌倦了了程序中的额System.out和log日志输出.单元测试使我看到了在开发过程中的安全性和便捷性,所以下决心好好整理下. 有感而发——&l ...

  8. JUnit单元测试入门

    什么是单元测试 写了个类,要给别人用,会不会有bug?怎么办?测试一下. 用main方法测试好不好?不好! 不能一起运行! 大多数情况下需要人为的观察输出确定是否正确 为什么要进行单元测试 重用测试, ...

  9. 接口测试“八重天”---RestAssured

    要记住每一个对你好的人,因为他们本可以不那么做. ---久节奏,慢读书 一.什么是RestAssured 偶然在逛帖子的时候发现一个接口测试框架,觉得不错,学习学习. 官方地址:http://rest ...

随机推荐

  1. Lambda--Optional、Collectors高级进阶方法

    Lambda--Collectors.optional高级使用 偶然看到了同事groupingBy用法,然后百度衍生出了optional,collectors,map等各种用法.突然发现自己之前写的代 ...

  2. js原始数据类型有哪些,引用数据类型有哪些

    js的数据类型划分方式为 原始数据类型和 引用数据类型 栈: 原始数据类型(Undefined,Null,Boolean,Number.String) 堆: 引用数据类型(对象.数组.函数) 两种类型 ...

  3. 做Android开发怎么才能不被淘汰?

    1.Jetpack架构组件从入门到精通 Android Jetpack - Navigation Android Jetpack - Data Binding Android Jetpack - Vi ...

  4. 本以为精通Android事件分发机制,没想到被面试官问懵了

    文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...

  5. EL表达式和JSTL标签

    什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的什么作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 ...

  6. 用AutoHotkey做汉字到Unicode字符串的转换

    要把汉字转换为搜的形式,也就是在汉字的Unicode Big Endian编码前面加"&#x",后面加分号.例如""字转换后为"搜" ...

  7. JmoVxia

    关于我 网名:季末微夏 英文:JmoVxia 签名:路漫漫其修远兮,吾将上下而求索 标签:iOS开发(ma)工程师(nong).技术爱好者 联系我 邮箱:JmoVxia@gmail.com Githu ...

  8. 手把手和你一起实现一个Web框架实战——EzWeb框架(四)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(四)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 这一篇文章主要实现路由组功能.实现路由 ...

  9. noip模拟44[我想我以后会碰见计数题就溜走的]

    noip模拟44 solutions 这一场抱零的也忒多了,我也只有45pts 据说好像是把几套题里面最难的收拾出来让我们考得 好惨烈啊,这次的考试我只有第一题骗了40pts,其他都抱零了 T1 Em ...

  10. 题解 v

    传送门 考场上只会爆搜--觉得重复状态其实有很多但不知道怎么记忆化,结果-- 对于类似这样n不算太小但只有二三十,而重复状态极多的题其实也是可以跑状压/记搜的,状态可以开map存 然后就是爆搜,就没什 ...