Im пытается сделать простой, как, например, может, который можно найти на странице официального PowerMock в (here) .I»делать частичную издеваться этого класса:Powermock частный раскорчевка gows неправильно
public class Simple {
public String doMe() {
return privateMethod();
}
private String privateMethod() {
return "POWERMOCK sucks";
}
}
И написал простой тест класс:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Simple.class)
public class ProcessorTest {
@Test
public void doMe() throws Exception {
Simple spy = PowerMockito.spy(new Simple());
PowerMockito.doReturn("hello").when(spy, "privateMethod");
String res = spy.doMe();
PowerMockito.verifyPrivate(spy, Mockito.times(1000)).invoke(
"privateMethod");
Assert.assertEquals(res, "hello");
}
}
Но результат таков:
java.lang.AssertionError: expected [hello] but found [null]
Expected :hello
Actual :null
<Click to see difference>
at org.testng.Assert.fail(Assert.java:94)
Так Powermo ck не только не высмеивает privateMethod
и возвращает «null», это нормально, так как он был вызван 1000 раз, когда это было не так.
Это получить еще более жуткое, если я пытаюсь возиться с насмешливым, как это:
PowerMockito.doReturn(1).when(spy, "privateMethod");
Так что я пытаюсь вернуть Integer вместо строки из privateMethod
. Тогда я получаю это:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
Integer cannot be returned by doMe()
doMe() should return String
***
Так по какой-то причине Powermock пытается издеваться общественный doMe
метод.
Любой понимает, что происходит? Я не.
Спасибо.
Моя среда:
Java 1.8, Mockito 1.10.19, Powermock 1.6.2
Я не могу воспроизвести вашу проблему, используя фрагмент кода. Пожалуйста, см. Мой пример в [Github] (https://github.com/thekingnothing/stackoverflow/tree/master/q36086167) –
, какая у вас конфигурация? – Anton
Я использую: JDK «1.8.0_74» для MacOS, а все другие библиотеки имеют ту же версию, что и вы. Вы можете проверить это на Github –