2013-10-21 38 views
7

我有一个有一些静态方法的类。我需要模拟这些静态方法。我知道PowerMock做到了这一点,但我无法找到任何教程/材料来阐明“Spock + PowerMock”集成。我更喜欢Spock给Junit,因此是难题。有没有办法让这两个框架玩球?任何帮助都非常感谢。示例代码,更是如此。与Spock一起使用PowerMock

更新:当前的方针状态

Spock behaving weirdly

回答

13

我在这里停留了一段时间。搜索了几个小时后,我看到这个github回购:https://github.com/kriegaex/Spock_PowerMock

我尝试添加一个PowerMockRule基本上使我能够与斯波克一起使用PowerMock。我不得不添加这些依赖关系。版本是1.5.4在

<dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4-rule</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-classloading-xstream</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

我的类看起来是这样的:

import org.junit.Rule 
import org.mockito.Mockito 
import org.powermock.api.mockito.PowerMockito 
import org.powermock.core.classloader.annotations.PrepareForTest 
import org.powermock.modules.junit4.rule.PowerMockRule 
import spock.lang.Specification 

@PrepareForTest([SomeStaticClass.class]) 
public class FlightFormSpec extends Specification { 

    @Rule PowerMockRule powerMockRule = new PowerMockRule(); 

    def "When mocking static"() { 
     setup : 
      PowerMockito.mockStatic(SomeStaticClass.class) 

     when : 
      Mockito.when(SomeStaticClass.someStaticMethod()).thenReturn("Philippines!"); 

     then : 
      SomeStaticClass.someStaticMethod() == "Philippines!" 
    } 
} 

这里是另一个资源:https://github.com/jayway/powermock/wiki/powermockrule

+2

嘿,你发现我的回购,并保存我自己回答这个问题。:-) – kriegaex

+0

@kriegaex你写的。我几乎放弃了Spock和PowerMock.Thanks公开您的回购! :) – juanpaolo

+1

@Avinash:你应该接受juanpaolo的回答,而不是你自己的回答,说明它不起作用。我认为他应得的。 – kriegaex

1

没有特别的集成;你最好的选择是尝试使用PowerMock“原样”。从我记忆中,PowerMock曾经遇到过Groovy的问题,我不知道这是否已经解决。如果我没有弄错,PowerMock会重写测试类的字节码,所以下一个问题就是它是否适用于Spock。让我们知道你发现了什么。

+0

尝试过了,我越来越相似,所描述的一个奇怪的错误这里.... [链接](http://markmail.org/message/uehzu2wejtveldo6)。绝对不知道这里发生了什么:( – Avinash

相关问题