我有一个文件Util.java
:
public class Util {
public static int returnInt() {
return 1;
}
public static String returnString() {
return "string";
}
}
另一堂课:
public class ClassToTest {
public String methodToTest() {
return Util.returnString();
}
}
我想使用TestNg和PowerMockito测试它:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Util.class)
public class PharmacyConstantsTest {
ClassToTest classToTestSpy;
@BeforeMethod
public void beforeMethod() {
classToTestSpy = spy(new ClassToTest());
}
@Test
public void method() throws Exception {
mockStatic(Util.class);
when(Util.returnString()).thenReturn("xyz");
classToTestSpy.methodToTest();
}
}
但是,它会引发以下错误:
失败:方法 org.mockito.exceptions.misusing.MissingMethodInvocationException: when()需要一个必须是'对mock进行方法调用'的参数。 例如: 当(mock.getArticles())thenReturn(文章);
我使用网络上的各种解决方案尝试了此解决方案,但无法在我的代码中找到错误。我需要为静态方法存根调用,因为我需要它用于遗留代码。 How do I mock a static method using PowerMockito?
答案 0 :(得分:1)
您需要将TestNG配置为使用PowerMock对象工厂,如下所示:
<suite name="dgf" verbose="10" object-factory="org.powermock.modules.testng.PowerMockObjectFactory">
<test name="dgf">
<classes>
<class name="com.mycompany.Test1"/>
<class name="com.mycompany.Test2"/>
</classes>
</test>
</suite>
在项目的suite.xml文件中。
请参阅此link。
答案 1 :(得分:1)
仅为了记录,添加使测试类成为PowerMockTestCase
的子类为我工作。
@PrepareForTest(Util.class)
public class PharmacyConstantsTest extends PowerMockTestCase {
ClassToTest classToTestSpy;
@BeforeMethod
public void beforeMethod() {
classToTestSpy = spy(new ClassToTest());
}
@Test
public void method() throws Exception {
mockStatic(Util.class);
when(Util.returnString()).thenReturn("xyz");
classToTestSpy.methodToTest();
}
}
答案 2 :(得分:0)
使用PowerMockito方法代替Mockito。文档指出:
PowerMockito通过几种新功能扩展了Mockito功能,例如模拟静态和私有方法等等。如果适用,请使用PowerMock而不是Mockito。
每个实例:
PowerMockito.when(Util.returnString()).thenReturn("xyz");