Краткий ответ: отметьте свой UrlWrapper.openConnection
как общедоступный, и все готово.
Во-вторых: вы не тестируете какой-либо метод в своем классе обслуживания, его код не имеет значения.
В-третьих: PowerMock может издеваться над частными методами, причины, по которым он не работает, довольно сложны.
- вы используете аннотации Junit 5. Поведение одного и того же теста отличается при использовании аннотаций JUnit4 и JUnit5
Рассмотрим следующий класс
public static class MyClass {
public String A() {
System.out.println("A called");
return "A";
}
private String B() {
System.out.println("B called");
return "B";
}
}
С аннотацией Junit4:
@org.junit.Test
public void testMockPrivateMethod() throws Exception {
MyClass myClass = PowerMockito.mock(MyClass.class);
PowerMockito.when(myClass.B()).thenReturn("mockB");
//PowerMockito.when(myClass, "B").thenReturn("mockB");
System.out.println(myClass.B());
}
Output:
mockB
С аннотацией Junit5:
@org.junit.jupiter.api.Test
public void testMockPrivateMethod() throws Exception {
MyClass myClass = PowerMockito.mock(MyClass.class);
PowerMockito.when(myClass.B()).thenReturn("mockB");
System.out.println(myClass.B());
}
Output:
B called
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.
Это потому, что вам нужно инструментарий байт-кода для имитации частных методов. К сожалению, движок Junit5 не использует PowerMockRunner (у него есть собственный механизм расширений). Обратите внимание, что вы можете использовать аннотации Junit4 с Junit5, но вам нужно импортировать винтажный раннер.
Как видите, вызывается настоящий метод. К сожалению, вы не видите исключения, поскольку ваши методы выдают NPE.