本篇主要讲解Spock如何扩展第三方Power Mock对静态方法进行测试
实现原理
前面的文章讲到Spock的单测代码是继承自Specification基类,而Specification又是基于Junit的注解@RunWith()实现的,代码如下:
@RunWith(Sputnik.class)@SuppressWarnings("UnusedDeclaration")public abstract class Specification extends MockingApi {
powermock的PowerMockRunner也是继承自Junit,所以使用powermock的@PowerMockRunnerDelegate()注解可以指定Spock的父类Sputnik去代理运行power mock,这样就可以在Spock里使用powermock去模拟静态方法、final方法、私有方法等
其实Spock自带的GroovyMock可以对groovy文件的静态方法mock,但对Java代码的支持不完整,只能mock当前Java类的静态方法,官方给出的解释如下:
(http://spockframework.org/spock/docs/1.3/all_in_one.html#_mocking_static_methods)