Spock虽然好用,但要应用到实际项目中还是需要注意几个问题,下面讲下我们公司在使用过程中遇到的一些问题和解决方案
版本依赖
要使用Spock首先需要引入相关依赖,目前使用下来和我们项目兼容的Spock版本是1.3-groovy-2.5,以maven为例(gradle可以参考官网),完整的pom依赖如下:
1.3-groovy-2.52.5.4org.spockframework spock-core ${spock.version}testorg.spockframework spock-spring ${spock.version}testorg.springframework spring-test testorg.codehaus.groovy groovy-all pom${groovy.version} groovy-test-junit5 org.codehaus.groovy groovy-testng org.codehaus.groovyorg.codehaus.gmavenplus gmavenplus-plugin 1.6compilecompileTests
Spock是使用groovy语言写单测的,所以需要引入groovy-all的依赖
在引入 groovy-all 包时排除了 groovy-test-junit5 和 groovy-testng,这两个包和和 power mock 有冲突,在执行 mvn test 会导致NPE的问题
如果你的项目中没有用过groovy,还需要添加groovy的maven编译插件,这样才能编译我们用Spock写的单元测试
引入groovy依赖后可能会出现版本冲突的问题,因为如果你的项目引用了springboot-start-base这样的集合式jar包,它里面也会引用groovy,有可能跟我们引入的groovy包版本出现冲突,或者公司的一些框架也会引用groovy的包,如果版本不一致也有可能冲突,需要排下包
然后执行 mvn clean compile 验证下是否有冲突,如果能成功编译就没有这个问题
目前Spock的最新版本是2.0以上,在Spock 2.x 的版本里官方团队已经移除Sputnik,不再支持代理运行power mock的方式
因为Spock 2.0是基于JUnit5,我们项目以前的单元测