0
如何嘲笑类似下面的方法:模拟传统的静态方法与嵌套调用
LoggerUtil.getInstance().getAppLog().info("Some log statement");
这里LoggerUtil被实例化以静态方式,虽然记录器被注入通过Spring此调用。
<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");
}
的代码是传统和日志语句存在于成千上万的地方。对它进行任何更改都是不可能的。
任何帮助将得到高度赞赏。提前致谢。
究竟发生了什么问题? – durron597
我在调用静态模拟时遇到异常。 –
什么例外?请用更多信息[编辑]你的问题。 – durron597