«Исключение UnfinishedStubbingException: здесь обнаружена незаконченная заглушка» было выдано при издевательстве над методом статической пустоты

#java #testing #exception #mockito #powermockito

Вопрос:

Я получаю сообщение об ошибке Незаконченная заглушка, обнаруженная здесь, при выполнении следующего кода:

Это MyClass с открытым статическим пустым myMethod.

 class MyClass{
public static void myMethod(){
    return;
}
 

}

Это MyClass2 с myMethod2 mehtod. Внутри myMethod2 вызывает myMethod.

 class MyClass2{
public String myMethod2(){
    MyClass.myMethod();
    return "String";
}
 

}

Здесь тестовый случай, написанный для тестирования myMethod2.

 class MyMethodTest{
MyClass2 myClass2;
@Test
public void myMethodTwoTest(){
    PowerMockito.mockStatic(MyClass.class);
    PowerMockito.doNothing().when(MyClass.class);
    MyClass.myMethod();
    String str = myClass2.myMethod2();
    assertEquals(str,"String");
}
 

}

При запуске этого метода я получаю исключение UnfinishedStubbingException.

     org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
-> at **.***.***.**.MyMethodTest.myMethodTwoTest(MyMethodTest.java:125)

E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();```


Please help me to solve this issue. 
 

Комментарии:

1. Эти разработчики-чокнутые

Ответ №1:

Я верю https://www.baeldung.com/mockito-mock-static-methods дает хорошее объяснение. Глядя на это, я думаю, что должно сработать что-то вроде следующего:

 class MyMethodTest{
MyClass2 myClass2;
@Test
public void myMethodTwoTest(){
    PowerMockito.mockStatic(MyClass.class).when(MyClass::myMethod).doNothing();
    String str = myClass2.myMethod2();
    assertEquals(str,"String");
}