gpt4 book ai didi

java - Powermock : Mocking static final logger

转载 作者:行者123 更新时间:2023-11-30 10:18:53 25 4
gpt4 key购买 nike

我正在尝试编写测试来检查是否记录了某些行。我在谷歌上搜索了一段时间,但我不明白为什么 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");
}
}

关于java - Powermock : Mocking static final logger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com