Как реализовать doNothing () для статического метода void? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь смоделировать один статический метод 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 не является частью нашего кода, у нас естьимпортировал этот внешний класс в нашу кодовую базу для выполнения некоторой задачи.

1 Ответ

0 голосов
/ 24 сентября 2019

Если вы хотите смоделировать не пустой метод, вам нужно определить поведение для этого метода в макете.Вы получаете 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.

...