Java Powermock:模拟静态最终记录器
我正在尝试编写测试来检查是否记录了某些行。我在谷歌上搜索了一会儿,但我不明白为什么Java Powermock:模拟静态最终记录器,java,unit-testing,logging,mockito,powermockito,Java,Unit Testing,Logging,Mockito,Powermockito,我正在尝试编写测试来检查是否记录了某些行。我在谷歌上搜索了一会儿,但我不明白为什么LOG没有被替换 要测试的类: public class Example { private static final Logger LOG = LoggerFactory.getLogger(Example.class); public void foo(...) { if(...) LOG.warn("Warning"); //...
LOG
没有被替换
要测试的类:
public class Example {
private static final Logger LOG = LoggerFactory.getLogger(Example.class);
public void foo(...)
{
if(...)
LOG.warn("Warning");
//...
}
}
测试:
使用SLF4J和PowerMock 1.7.1
PS:在本项目中,替换
私有静态最终记录器日志
不是选项。您创建主题太早了。在创建主题之后,可以很好地安排模拟
在安排静态模拟之后创建主题
@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");
}
}
你创建主题太早了。在创建主题后,您可以很好地安排模拟。谢谢。所以我也必须避免@injectmock@NoobieNoob这并不是说你必须避免它们。这是因为在这种情况下不需要它们。
@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");
}
}