作者:刘刚michaelup_340 | 来源:互联网 | 2024-11-07 14:02
篇首语:本文由编程笔记#小编为大家整理,主要介绍了Powermock:模拟静态最终记录器相关的知识,希望对你有一定的参考价值。 我正在尝试编写检查是否已记录某些行的测试。我用谷歌搜索了一段时间,但我无
篇首语:本文由编程笔记#小编为大家整理,主要介绍了Powermock:模拟静态最终记录器相关的知识,希望对你有一定的参考价值。
我正在尝试编写检查是否已记录某些行的测试。我用谷歌搜索了一段时间,但我无法弄清楚为什么没有更换LOG
。
要测试的类:
public class Example {
private static final Logger LOG = LoggerFactory.getLogger(Example.class);
public void foo(...)
{
if(...)
LOG.warn("Warning");
//...
}
}
测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFactory.class})
public class MyTest
{
@Mock
Logger logger;
@InjectMocks
private final Example example = new Example();
@Test
public void test1() {
PowerMockito.mockStatic(LoggerFactory.class);
logger = PowerMockito.mock(Logger.class);
PowerMockito.when(LoggerFactory.getLogger(Example.class)).thenReturn(logger);
example.foo(...);
Mockito.verify(logger).warn("Warning");
}
}
使用SLF4J和PowerMock 1.7.1。
PS:在这个项目中,替换private static final Logger LOG
是没有选择的。
答案
您过早地创建主题。在创建主题后,您可以很好地安排模拟。
在安排静态模拟之后创建主题
@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFactory.class})
public class MyTest {
@Test
public void test1() {
//Arrange
Logger logger = PowerMockito.mock(Logger.class);
PowerMockito.mockStatic(LoggerFactory.class);
PowerMockito.when(LoggerFactory.getLogger(Example.class)).thenReturn(logger);
Example example = new Example();
//Act
example.foo(..);
//Assert
Mockito.verify(logger).warn("Warning");
}
}