我有一个有一些静态方法的类。我需要模拟这些静态方法。我知道PowerMock做到了这一点,但我无法找到任何教程/材料来阐明“Spock + PowerMock”集成。我更喜欢Spock给Junit,因此是难题。有没有办法让这两个框架玩球?任何帮助都非常感谢。示例代码,更是如此。与Spock一起使用PowerMock
更新:当前的方针状态
我有一个有一些静态方法的类。我需要模拟这些静态方法。我知道PowerMock做到了这一点,但我无法找到任何教程/材料来阐明“Spock + PowerMock”集成。我更喜欢Spock给Junit,因此是难题。有没有办法让这两个框架玩球?任何帮助都非常感谢。示例代码,更是如此。与Spock一起使用PowerMock
更新:当前的方针状态
我在这里停留了一段时间。搜索了几个小时后,我看到这个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
没有特别的集成;你最好的选择是尝试使用PowerMock“原样”。从我记忆中,PowerMock曾经遇到过Groovy的问题,我不知道这是否已经解决。如果我没有弄错,PowerMock会重写测试类的字节码,所以下一个问题就是它是否适用于Spock。让我们知道你发现了什么。
尝试过了,我越来越相似,所描述的一个奇怪的错误这里.... [链接](http://markmail.org/message/uehzu2wejtveldo6)。绝对不知道这里发生了什么:( – Avinash
嘿,你发现我的回购,并保存我自己回答这个问题。:-) – kriegaex
@kriegaex你写的。我几乎放弃了Spock和PowerMock.Thanks公开您的回购! :) – juanpaolo
@Avinash:你应该接受juanpaolo的回答,而不是你自己的回答,说明它不起作用。我认为他应得的。 – kriegaex