驗證SLF4J我有SLF4J記錄器類實例化,如:嘲諷與JMockit
public class MyClass {
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
public void foo() {
log.warn("My warn");
}
}
而且我需要JMockit進行測試,如:
@Test
public void shouldLogWarn(@Mocked Logger log) throws Exception {
new Expectations() {{
log.warn(anyString);
}};
MyClass my = new MyClass();
my.foo();
}
搜索了很多我想通了之後,我需要以某種方式使用MockUp。但不能確切地得到它。
順便說一句,我正在使用JMockit(1.29)的最後一個版本,你不能再爲最終靜態字段設置setField(log)。
非常感謝!此外,在這種情況下,必須添加'@Mocked LoggerFactory未使用',因爲如果真正的LoggerFactory試圖與模擬記錄器一起工作,沒有獲得NPE。 – mergoth
@mergoth如果您的代碼使用靜態方法,那麼嘲笑LoggerFactory是不必要的。所以'私有靜態最終記錄器日誌= LoggerFactory.getLogger(MyClass.class);'事實上,我看到你正在使用它,所以我不知道爲什麼你需要一個LoggerFactory的模擬實例。我在代碼中使用完全相同的東西,但不需要模擬LoggerFactory。 – Thunderforge
如果LoggerFactory未被模擬,getLogger()方法會嘗試獲取記錄器實例,並最終與NPE一起死亡,同時將已模擬的Logger實例放置到logback lib深處的非null強制Map中。 – mergoth