![](/img/trans.png)
[英]Nullpointer in a @Mock (mocking final static Hashtable) with Powermock
[英]Powermock: Mocking static final logger
我正在嘗試編寫測試來檢查是否已記錄某些行。 我用谷歌搜索了一段時間,但我不明白為什么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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.