我试图模拟一个静态 void 方法,我尝试了 PowerMock 但总是遇到 NullPointer 异常。
我们正在尝试模拟以下调用 -
public Class XYZ{
public void method1(){
....
SampleClass.methodTypeStatic1().methodTypeStatic2("xyz", "mno", classVeriable);
}
主类是 -
public class SampleClass implements SampleClassParent{
private static SampleClass var1;
public static SampleClass methodTypeStatic1(){
if (var1 == null) {
//Do something on var1
}
return var1;
}
public void methodTypeStatic2(String localVar1, String localVar2, DifferentStaticClass localVar3) {
//Do something
}}
我试图在我的测试类中像这样模拟调用 -
@RunWith(PowerMockRunner.class)
@PrepareForTest({SampleClass.class})
public class XYZTest{
@InjectMocks
XYZ xyzTestService;
@Test
public void testMethod1(){
...
PowerMockito.mockStatic(SampleClass.class);
PowerMockito.doNothing().when(SampleClass.methodTypeStatic1());
xyzTestService.method1();
}
还要提到的是 SampleClass.class 不是我们代码的一部分,我们已将此外部类导入到我们的代码库中来执行某些任务。
最佳答案
如果你想模拟一个非void方法,你需要在模拟上定义这个方法的行为。您可以免费获得 doNothing
(因为这就是模拟的作用),
但是您需要定义该方法应该返回什么。
您的测试可能如下所示:
@Test
public void testMethod1() {
SampleClass sample = new SampleClass();
PowerMockito.mockStatic(SampleClass.class);
PowerMockito.when(SampleClass.methodTypeStatic1()).thenReturn(sample);
XYZ xyzTestService = new XYZ();
xyzTestService.method1();
}
您没有提到任何 @Mock
注释,因此除了创建 XYZ
对象之外,使用 @InjectMocks
对您没有任何作用。
关于java - 如何为静态 void 方法实现 doNothing() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58001276/