我有一个工具类,这是一个最终的类。在那里我用注射器注射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