这篇文章的诞生纯属巧合:一是早上看到微信群中有人问 Junit 的问题(往往这个时候我就忍不住向他们推销 Spock,同样的,这次也没有忍住),二是下午读到一篇转发的 JUnit5 vs Spock 的文章。于是乎,顺应天意写了下来。
我们团队已有多年(5+ 年)的 Spock 使用经验,不仅用在 Grails 项目中,而且在几乎所有 Java 项目中同样也采用它作为测试用例的书写工具。正如我在工具推荐给出的推荐原因:
Groovy DSL、jvm 下最好用的测试框架
Spock 完全担得起这样的评价!看看下面的代码示例,相信你有自己的判断。
阅读前的提醒:
本文代码主要来自于上面的文章,部分来自于我之前写的文章。并且,代码对比点也来自于那篇文章。
上面那篇文章给出了更详细对比,因为本文不是翻译,对于想了解全文内容的小伙伴请自行前往阅读。
如果你懒得读那篇文章,只想看结论,我简单归纳如下:
JUnit5 名气和活跃度更大。
凡事跟写代码相关的,Spock 均胜出。
作者自己更喜欢 Spock。
好了,“ talk is cheap, show me the code ”。
JUnit5
Spock
JUnit5
Spock
你没看错,Spock 的测试方法名称可以是字符串,而且在我们的实际使用过程中直接就写成中文,这样产生出来的测试报告一眼就看明白什么问题。
有条件执行测试
JUnit5
结合相应的注解来做,这里就列出几例,其余自己去查文档。
Spock
利用 Groovy 动态语言的特性,使用“注解 + 闭包”的形式,提供更灵活的使用。
Mocking
JUnit5
需结合 Mockito
Spock
内置了 Mock 机制
参数化
JUnit5
Spock
这是我的最爱
因为不用 JUnit 好多年,对于 JUnit5 没有去研究是否提供了对于并发测试编写的内部支持。
这里的例子来自于我之前写的 Spock + Vert.x 自动化测试的文章。
几乎是无痛编写!
Spock 对于并发测试提供了若干辅助类:
BlockingVariable,这个类的作用就是一直阻塞,直到有值。它非常适合测试异步回调返回值的测试场景。
AsyncConditions,这个类用于测试异步条件是否。
PollingConditions,类似上面,但更强。
看完代码,你的答案是什么呢?
注:欲访问文中链接,请点击【阅读原文】。