Java 如何为静态void方法实现doNothing()?
我试图模拟一个静态void方法,我尝试了PowerMock,但总是得到NullPointer异常 我们试图模仿下面的通话-Java 如何为静态void方法实现doNothing()?,java,spring-boot,mockito,powermockito,springmockito,Java,Spring Boot,Mockito,Powermockito,Springmockito,我试图模拟一个静态void方法,我尝试了PowerMock,但总是得到NullPointer异常 我们试图模仿下面的通话- public Class XYZ{ public void method1(){ .... SampleClass.methodTypeStatic1().methodTypeStatic2("xyz", "mno", classVeriable); } 主要课程是- public class SampleClass implements Samp
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
注释,因此使用@InjectMocks
除了创建XYZ
对象之外,对您没有任何帮助。请添加完整的单元测试和相关的堆栈跟踪。问题会根据要求进行更新。您添加的不是完整且可运行的单元测试。您使用什么注释?使用@PrepareforTest(SampleClass.class)注释测试类,然后尝试,还有一件事是methodTypeStatic1不是void,您不应该在非void方法上使用doNothing。