这一篇介绍在理论应用Spock的过程中如何把一些罕用的测试方法抽出来,封装成基类应用

BaseSpock

在后面几篇文章解说Spock联合power mock实现静态方法mock性能时,示例代码里常常会用到LogUtils等工具类的静态方法去记录日志,那咱们就能够把LogUtils类的mock代码抽到一个公共类中,而后咱们的测试类去继承咱们本人实现的公共类

比方咱们把公共类起名叫BaseSpock.groovy文件,那么继承它的子类就领有了模仿LogUtils静态方法的性能,而不必每个测试类独自去实现mock LogUtils日志的性能

代码如下:

/** * Spock基类 * @Author: www.javakk.com * @Description: 公众号:Java老K */@RunWith(PowerMockRunner.class)@PowerMockRunnerDelegate(Sputnik.class)@PrepareForTest([LogUtils.class])@SuppressStaticInitializationFor(["com.javakk.spock.util.LogUtils"])class BaseSpock extends Specification{    void setup() {        println "Spock setup"        // mock掉一些我的项目中罕用的类,比方日志记录        PowerMockito.mockStatic(LogUtils.class)        ......    }}

BaseSpock是咱们封装的spock基类,它继承Specification,在setUp办法外部对LogUtils进行了mock

BaseSpock能够放在一个公共的我的项目中或作为jar的形式援用

也能够放在src/main/groovy/上面作为一个公共类调用

而后原来用到LogUtils日志类的单元测试能够继承BaseSpock基类

class UserServiceStaticTest extends BaseSpock {

这样原来的单元测试就不必再去实现mock LogUtils日志类静态方法的性能了

如果你除了LogUtils这些罕用的类须要mock外,还须要mock其余的静态方法的话,应用后面介绍的spock联合power mock的用法即可,相似上面这样写:

@PrepareForTest([IDNumberUtils.class])class UserServiceStaticTest extends BaseSpock {

以后的单元测试类须要mock IDNumberUtils类,能够应用@PrepareForTest注解,这样既能够应用基类mock LogUtils日志的性能,也能够给本人的单测类减少新的静态方法mock性能

有几点须要留神:

BaseSpock的类型是groovy文件,这个是因为Spock内置的测试引擎在启动时会查看继承它的子类是否是groovy类型的文件,所以如果你要封装一个相似BaseSpock的基类,文件后缀不能是 .java的,必须是 .groovy的类型

所有的Spock单测类不能有本人的构造函数,因为单元测试的实例都是由Spock创立和治理的

Spock单元测试代码的运行程序是:

setupSpec()setup()cleanup()cleanupSpec()

  • setupSpec 相似于Junit的 @beforeClass
  • setup 相似于Junit的 @before
  • cleanup 相似于Junit的 @after
  • cleanupSpec 相似于Junit的 @afterClass