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.

Другие вопросы по тегам