Java 如何为静态void方法实现doNothing()?

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

我试图模拟一个静态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
注释,因此使用
@InjectMocks
除了创建
XYZ
对象之外,对您没有任何帮助。

请添加完整的单元测试和相关的堆栈跟踪。问题会根据要求进行更新。您添加的不是完整且可运行的单元测试。您使用什么注释?使用@PrepareforTest(SampleClass.class)注释测试类,然后尝试,还有一件事是methodTypeStatic1不是void,您不应该在非void方法上使用doNothing。