PowerMock, издевается над статическим методом, THEN вызывает реальные методы для всех остальных статики
Я настраиваю насмешку над классом статических методов. Я должен сделать это с помощью метода установки JUnit @Before
-annotated.
Моя цель - настроить класс так, чтобы он вызывал реальные методы, за исключением для тех методов, которые я явно высмеиваю.
В основном:
@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class);
// mock out certain methods...
when(StaticUtilClass.someStaticMethod(anyString())).thenReturn(5);
// Now have all OTHER methods call the real implementation??? How do I do this?
}
Проблема, с которой я сталкиваюсь, заключается в том, что в StaticUtilClass
метод public static int someStaticMethod(String s)
, к сожалению, выдает RuntimeException
, если ему присваивается значение null
.
Поэтому я не могу просто пойти очевидным путем вызова реальных методов в качестве ответа по умолчанию, как показано ниже:
@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods
// The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
// Even though I don't actually want to call the method, I just want to setup a mock result
when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5);
}
Мне нужно установить ответ по умолчанию для вызова реальных методов для всех других статических методов после. Я высмеиваю результаты из метода, который меня интересует.
Это возможно?
Ответы
Ответ 1
Что вы ищете, называется частичным насмешкой.
В PowerMock вы можете использовать метод mockStaticPartial.
В PowerMockito вы можете использовать stubbing, который будет заглушать только определенный метод и оставить другим без изменений:
PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);
также не забывайте о
@PrepareForTest(StaticUtilClass.class)