同样是断言,为何 Hamcrest 如此优秀?测试灵魂三问,该如何回答?

本文为霍格沃兹测试学院学员的课程学习记录,供参考,想进一步深入学习?文末获取入群方式。

Junit 自带原生断言 Assert,常用的一些断言,如 assertTrue、assertEquals、assertNotEquals
等,总体来说都是比较简单的相等语义判断的断言。如果需要断言一个约等于的值或者有个区间波动的值,是否包含某个值等,这个时候 assert
就无法直接满足需求了。这里就需要一个更强大灵活的断言—— Hamcrest 断言


** Hamcrest 断言**

根据项目对象模型(POM)的概念,Maven 可以管理一个项目的依赖关系、构建、报表以及信息中心的部分文档。

hamcrest 断言 maven依赖:

hamcrest支持多种语言,这里以 Java 为例:

进入到 hamcrest 断言的 Matchers 类中可以看到其中包含了相当丰富的断言匹配器,能更大程度上实现各种复杂断言场景:

官网也对断言进行了分类和说明:

先来看hamcrest断言和原生断言的写法区别,在官方文档中给出了的第一个实例如下:

在Junit4的官方也给出了说明:

可以看到,hamcrest 会统一先使用 assertThat 来声明一个断言,然后再在内部进行具体匹配器的断言细节,期望值和实际值进行对比;有了
hamcrest 断言,就可以直接摒弃原生的断言了~

** Hamcrest 断言实操演示**

Hamcrest断言功能很强大,那么如何 get 这个功能的正确打开方式呢?接下来用实操演示,带领大家一起来进行实操。毕竟:内化于心,外化于行才是最重要的。

  • equalTo : 判断相等

在失败时可以看到打印了我的说明:actual value equal to 10 以及失败的对比,<> 表示原始类型

  • closeTo : 接近于多少,给定误差值源码中是这样写的

需要给定两个 double 类型的参数,一个是你要操作的数值,一个是误差范围;另外要注意的是实际值也必须是 double 类型才可以进行对比:

  • anyOf : 后面可跟上多个匹配器,只要其中任何一个满足条件就通过

  • allOf : 后面可跟上多个匹配器,只要其中任何一个不满足条件都不通过

另外还有很多常用的匹配器,比如

  • hasItem, hasItems ,contains,等;具体的可以参考官方文档和类库

hamcrest官方文档:

http://hamcrest.org/JavaHamcrest/tutorial

官方GitHub:

https://github.com/junit-team/junit4/wiki/Matchers-and-assertthat

Mvnrepository:

https://mvnrepository.com/artifact/org.hamcrest/hamcrest-core/2.1

想深度掌握断言机制的同学,这里也推荐霍格沃兹测试学院独家特色课程:

https://ke.qq.com/course/254956

** _
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息

最近,测试人朋友圈被 3 个直击灵魂的问题刷屏了。

1 问: 为什么这个 Bug 测不出来?

2 问: 测试怎么测得? 到底会不会测?

3 问: 测试快点啊! 为什么总是测试拖后腿,最后才报 Bug?

这灵魂三问,真是「 测试听了会沉默,QA 听了会流泪 」,心中戚戚然,又如鲠在喉,不吐不快!

各位测试同仁,你怎么看?

小编特意挑选了 TesterHome 社区几位测试老司机的回复,附文如下,供大家探讨!

另,请大家在评论区留言,精彩回复赠送精美礼物(测试好书、定制版卫衣、帆布包等)。

by @混子 ****

如果是研发问,直接怼回去

1. 这么简单功能也出错?

2. 研发怎么开发的,会不会开发?

3. 研发能不能快点,为什么最后才给我们打包?

如果是领导问,马上认错

对不起!对不起!对不起!

by @结婚兔子 ****

具体问题具体分析吧:

1. 复盘下为什么没有测出来? 是开发单元测试覆盖度不够,用例覆盖度不够,还是事实上就是难以覆盖到,之后改进。

2. 把测试流程分享出来 ,邀请业务方、研发、测试等等相关人员,一起完善。

3. 从流程下手
,需求开发测试都要排期,测试排期要有“底线”.实在不行,只能用老办法,要么砍掉不核心的需求,要么延期;另一方面,做测试提效,自动化测试、提测质量准入、测试左移右移那一套都用上。

by @BNN ****

  1. 分析缺陷产生原因、复现条件 :测试环境能否复现?线上环境为什么没有复现?没有复现影响多大?—— 如果是漏测,那就得认;

2. 摆事实
:讲清测试方案、设计、方法,确认这个方案当时有没有获得一致评审通过?如果当时已经通过了,那就是大家的锅;如果这些没做,那测试当然就负主要责任;

3. 看看是不是测试阶段总在做一些验收性的测试?
如果是,验收性测试本身就比较耗时间,测试时间不足,测试的深度自然也不足;如果本身不是做一些验收性的测试,测试能够提前介入,一般不会“最后才报
Bug”,这里只需要列举“提前”报的 Bug。

by @Ouroboros ****

看情况吧。 如果是自己问自己,那么就好好分析下。

如果是开发要甩锅 ,那么就按 @混子 兄弟说的怼回去。

如果是领导问到了 ,那就是时间紧、技术债多、开发不自测、基础设施差、沉淀差、产品瞎B改,再道个歉,许诺个美好的未来。

最后说要用 TDD,需要一波 Money
或者其它激励,来偿还技术债,比如让开发自测需要推动,基础设施需要组织人做,都需要钱和资源。嗯,这么看,好像还是个增收途径。

各位同学,请在评论区留下你的精彩回复。也推荐大家加入测试大咖公开课群,收听测试开发干货分享和大咖解读!

- 测试大咖公开课 -

加小助手微信,回复「 公开课

收听测试开发干货分享和大咖解读

往期推荐

-测试工程师职业发展漫谈|大咖深度分享

-面试|今日头条测试开发岗位面试题目回顾

-通关这 8 道面试题的测试工程师,年薪都在 30W+ 以上!

-面试|互联网大厂测试开发岗位会问哪些问题?

-面试|Python 自动化测试面试经典题目回顾

-面试|百度测试开发岗位面试题目回顾

-面试|卡掉不少人的一道腾讯算法面试题,高手来试试?

-一道有趣的大厂测试面试题,你能用 Python or Shell 解答吗?

-面试| 如果测试你完全不熟悉的系统,你会怎么办?

-测试开发真题|测试老兵进阶突破,成功拿下大厂 P7 Offer!

** ** ** ** 点一下好看,就少一个 Bug!********

来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息

原文地址:https://www.cnblogs.com/hogwarts/p/15812628.html