后面的几篇文章介绍了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