NPE в смоделированном методе с использованием PowerMock
Я пытаюсь смоделировать вывод вызова метода с помощью PowerMock. Мой класс выглядит так:
public class TestEasyMock {
private static TestEasyMock TEST_INSTANCE = new TestEasyMock();
public static TestEasyMock getInstance() {
return TEST_INSTANCE;
}
private Cache<String, String> first = CacheBuilder.newBuilder().
maximumSize(8192).expireAfterWrite(30, TimeUnit.MINUTES).build();
private Set<String> second = new TreeSet<String>();
public String testMethod (String testParam) {
return first.getIfPresent(testParam);
}
}
Тест, который я запускаю, выдает NPE в вызове testMethod, и кажется, что первое поле пустое. Поскольку testMethod является поддельным, я ожидал, что testMethod на самом деле не вызывается, а напрямую возвращает то, что было указано. Тест, который я запускаю:
@RunWith(PowerMockRunner.class)
@PrepareForTest({TestEasyMock.class})
public class EasyMockTest {
@Test
public void firstTest (){
suppress(constructor(TestEasyMock.class));
TestEasyMock testObject = PowerMock.createStrictPartialMockForAllMethodsExcept(TestEasyMock.class, "testMethod");
EasyMock.expect(testObject.testMethod("blabla")).andReturn("blaTwice");
EasyMock.replay(testObject);
String result = TestUtils.replaceString("replaceable");
assertEquals("replaceable(blaTwice)", result);
}
}
Есть идеи, почему это происходит?
Благодарю.
1 ответ
Когда вы используете PowerMock.createStrictPartialMockForAllMethodsExcept(TestEasyMock.class, "testMethod");
, вы указываете, что testMethod не должен быть посмешищем. См. Описание метода в документации по PowerMock API.