2015-09-11 5 views
0

Как издеваются метод, как показано ниже:Mock наследство статический метод с вложенными вызовами

LoggerUtil.getInstance().getAppLog().info("Some log statement"); 

Здесь LoggerUtil конкретизируется в статическом образом, хотя регистраторы впрыскивается в этот вызов через пружины.

<bean id="LoggerUtil" class="util.LoggerUtil" factory-method="getInstance"> 
    <property name="appLog" ref="AppLogger" /> 
</bean> 
<bean id="AppLogger" class="org.apache.log4j.Logger" factory-method="getLogger"> 
    <constructor-arg value="logging.AppLogger" /> 
</bean> 

Я попытался код ниже, но безрезультатно:

@Test 
public void testLoggerUtil() { 

    PowerMockito.mockStatic(LoggerUtil.class); 
    LoggerUtil logUtil = mock(LoggerUtil.class); 
    Logger logger = mock(Logger.class); 

    PowerMockito.when(LoggerUtil.getInstance()).thenReturn(logUtil); 
    when(logUtil.getAppLog()).thenReturn(logger); 
    Mockito.doNothing().when(logger).info(any(String.class)); 

    LoggerUtil.getInstance().getAppLog().info("Some log"); 

} 

Код наследие и утверждение журнала присутствует в тысячах мест. Внесение каких-либо изменений в это невозможно.

Любая помощь будет высоко оценена. Заранее спасибо.

+0

Что на самом деле происходит не так? – durron597

+0

Я получаю исключение, вызывая статический макет. –

+0

Какое исключение? Пожалуйста, отредактируйте свой вопрос с дополнительной информацией. – durron597

ответ

0

Возможно, стоит попробовать AspectJ. Вы можете попробовать создать аспект, выполняемый на этапе тестирования, который находит pointcut LoggerUtil.getInstance() и возвращает некоторую макетную или тестовую реализацию. Таким образом, вам не придется иметь дело с журналом каждый раз, когда вы создаете тест для устаревшего кода.

Смежные вопросы