共计 1474 个字符,预计需要花费 4 分钟才能阅读完成。
后面的几篇文章介绍了 Spock 的各种语法,和 power mock 的联合,以及注意事项,这篇做个总结,让大家对 Spock 有个全面主观的理解
Spock 长处
- 遵循 BDD 模式、功能强大、语义标准、可读性好、易于保护、富裕表现力
- 更灵便的管制测试行为,专一代码的逻辑测试而不是书写语法上
- 用自然语言形容测试步骤(非技术人员也能看懂测试用例)
- 兼容 mock 框架,能够和我的项目中的 java 单测代码共存,升高迁徙老本
- IDE 反对良好
- Groovy 动静语言,DSL,语法简洁,约定优于配置,适宜麻利开发
Spock 毛病
1. 学习老本
Spock 自身其实没什么学习老本,因为它的限度条件不多:必须有至多一个标签、有 when 必有 then
次要是 groovy 语言,如果用过的会感觉很容易(其实真的很容易),没用过的也不必放心,因为只有你会 java,就会 groovy,花个半小时在网上看下它的根本语法即可,因为咱们只是用来写单元测试
groovy 还有一个特点就是你能够在 Spock 的单测代码里齐全用 java 代码写,因为 groovy 齐全兼容 java 语法,或者 java 和 groovy 混着写都没问题,因为最终都是编译成 class 执行的,JVM 虚拟机不关怀源文件是什么语言
(其实 groovy 的用处很广,像咱们的 Jenkins 里的 pipeline、Elasticsearch、hadoop 框架中很多插件都是应用 groovy 开发的)
2. 单测代码执行工夫
groovy 语法的简洁能够简略了解为语法糖(其实不齐全是,在 jvm 中执行应用的是 invokeDynamic 指令),语法糖会相应的减少 jvm 构建 AST 语法树的工夫
大家在运行的时候可能会留神到 spock 代码的编译要比 java 的单测代码慢一些(视代码复杂度而言,均匀大略慢 1 -2s),然而执行的工夫和 java 的差不多,如果对这个有要求,谨慎应用,最好本人本地验证下
3. Spock 不反对动态、Final 办法的 Mock
对于这一点在后面的文章里曾经讲过,所以须要引入 power mock,也没必要反复造轮子
另外在 Spock 代码里不能应用 power mock 的注解,比方 @InjectMock,Spock 有一些兼容问题,能够应用 PowerMockito.mock()的形式代替注解,但可能没有注解的语法简洁
总体上利大于弊
有时候你感觉单测代码很难写,阐明被测试的代码自身不够正当,须要去关注代码自身的逻辑,设计是否正当,重构业务代码,让你的代码变得容易测试
因为 代码的可测试性也是掂量代码品质的重要规范
Spock 只是个工具,如果用它都无奈解决你的单测 case,那就须要把更多的注意力放在业务代码的设计上
总之 Spock 不能保障让你爱上写单测,但至多不会恶感 ^_^
初衷
网上对于 Spock 的材料过于简略,包含官网的 demo,无奈解决咱们我的项目中的简单业务场景,须要找到一套适宜本人我的项目的成熟解决方案
所以感觉有必要把咱们我的项目中应用 Spock 的教训分享进去,帮忙大家解决理论问题或带来一些启发,如果你在应用过程中遇到问题能够在公众号 (Java 老 k) 或我的博客 www.javakk.com 留言交换
参考资料
官网:
http://spockframework.org/
官网文档:
http://spockframework.org/spock/docs/1.3/all_in_one.html
github:
https://github.com/spockframework/spock
代码示例:
https://github.com/spockframework/spock-example