Подтвердить что ты не робот

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); 
}

Мне нужно установить ответ по умолчанию для вызова реальных методов для всех других статических методов после. Я высмеиваю результаты из метода, который меня интересует.

Это возможно?

4b9b3361

Ответ 1

Что вы ищете, называется частичным насмешкой.

В PowerMock вы можете использовать метод mockStaticPartial.

В PowerMockito вы можете использовать stubbing, который будет заглушать только определенный метод и оставить другим без изменений:

PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);

также не забывайте о

@PrepareForTest(StaticUtilClass.class)