我有一個工具類,這是一個最終的類。在那裏我用注射器注射LOGGER。使用Powermock嘲弄靜態私有最終變量?
public final class Utilities {
@Inject
private static Logger.ALogger LOGGER;
private Utilities() {
//this is the default constructor. so there is no implementation
}
public static String convertToURl(string input){
try{
//do some job
}catch(IllegalArgumentException ex){
LOGGER.error("Invalid Format", ex);
}
}
}
雖然我爲這種方法編寫單元測試,但我必須模擬LOGGER,否則會拋出空指針異常。我怎樣才能嘲笑這個LOGGER而不創建這個類的實例。我試圖對變量進行白盒操作。但它只適用於實例?
不[注射到靜態字段(http://stackoverflow.com/questions/19225179/is-it-possible-to-inject-a-cdi-bean-into-a-static-variable -in-java-ee-6)爲你工作? – fracz
默認情況下,guice不允許通過設計進行靜態注入。但我們可以請求[this](http://stackoverflow.com/questions/28513147/guice-injection-in-static-variable) – Burusothman
我不知道。我還沒有使用過,但是如果它能夠注入靜態字段,也許可以用它在單元測試中注入一個記錄器模擬? – fracz