转载

JUnit5 使用者:为何 Spock 值得你看它一眼

这篇文章的诞生纯属巧合:一是早上看到微信群中有人问 Junit 的问题(往往这个时候我就忍不住向他们推销 Spock,同样的,这次也没有忍住),二是下午读到一篇转发的 JUnit5 vs Spock 的文章。于是乎,顺应天意写了下来。

我们团队已有多年(5+ 年)的 Spock 使用经验,不仅用在 Grails 项目中,而且在几乎所有 Java 项目中同样也采用它作为测试用例的书写工具。正如我在工具推荐给出的推荐原因:

Groovy DSL、jvm 下最好用的测试框架

Spock 完全担得起这样的评价!看看下面的代码示例,相信你有自己的判断。

阅读前的提醒:

  • 本文代码主要来自于上面的文章,部分来自于我之前写的文章。并且,代码对比点也来自于那篇文章。

  • 上面那篇文章给出了更详细对比,因为本文不是翻译,对于想了解全文内容的小伙伴请自行前往阅读。

  • 如果你懒得读那篇文章,只想看结论,我简单归纳如下:

    • JUnit5 名气和活跃度更大。

    • 凡事跟写代码相关的,Spock 均胜出。

    • 作者自己更喜欢 Spock。

好了,“ talk is cheap, show me the code ”。

测试结构

JUnit5

JUnit5 使用者:为何 Spock 值得你看它一眼

Spock

JUnit5 使用者:为何 Spock 值得你看它一眼

异常测试

JUnit5

JUnit5 使用者:为何 Spock 值得你看它一眼


Spock

你没看错,Spock 的测试方法名称可以是字符串,而且在我们的实际使用过程中直接就写成中文,这样产生出来的测试报告一眼就看明白什么问题。

JUnit5 使用者:为何 Spock 值得你看它一眼

有条件执行测试

JUnit5

结合相应的注解来做,这里就列出几例,其余自己去查文档。


JUnit5 使用者:为何 Spock 值得你看它一眼

Spock

利用 Groovy 动态语言的特性,使用“注解 + 闭包”的形式,提供更灵活的使用。

JUnit5 使用者:为何 Spock 值得你看它一眼

Mocking

JUnit5

需结合 Mockito

JUnit5 使用者:为何 Spock 值得你看它一眼


Spock

内置了 Mock 机制

JUnit5 使用者:为何 Spock 值得你看它一眼

参数化

JUnit5

JUnit5 使用者:为何 Spock 值得你看它一眼


Spock

这是我的最爱

JUnit5 使用者:为何 Spock 值得你看它一眼

并发测试

因为不用 JUnit 好多年,对于 JUnit5 没有去研究是否提供了对于并发测试编写的内部支持。

这里的例子来自于我之前写的 Spock + Vert.x 自动化测试的文章。

JUnit5 使用者:为何 Spock 值得你看它一眼


几乎是无痛编写!

Spock 对于并发测试提供了若干辅助类:

  • BlockingVariable,这个类的作用就是一直阻塞,直到有值。它非常适合测试异步回调返回值的测试场景。

  • AsyncConditions,这个类用于测试异步条件是否。

  • PollingConditions,类似上面,但更强。

最后

看完代码,你的答案是什么呢?

注:欲访问文中链接,请点击【阅读原文】。

原文  http://mp.weixin.qq.com/s?__biz=MzIyOTY1NDYyMw==&mid=2247484329&idx=1&sn=9bea7a0b4ce64896e5fd170dabde08fe
正文到此结束
Loading...