android上的Logback 2.0在I';我正在运行单元测试

android上的Logback 2.0在I';我正在运行单元测试,android,unit-testing,nullpointerexception,testng,logback,Android,Unit Testing,Nullpointerexception,Testng,Logback,我转到了logback 2.0。当我运行单元测试(使用@Test)时,所有的测试都工作得很好。但是,它们给出了一个错误: Failed to instantiate [ch.qos.logback.classic.LoggerContext] Reported exception: java.lang.NullPointerException at ch.qos.logback.core.android.AndroidContextUtil.getMountedExternalStorageDi

我转到了logback 2.0。当我运行单元测试(使用@Test)时,所有的测试都工作得很好。但是,它们给出了一个错误:

Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
java.lang.NullPointerException
at ch.qos.logback.core.android.AndroidContextUtil.getMountedExternalStorageDirectoryPath(Unknown Source)
at ch.qos.logback.core.android.AndroidContextUtil.setupProperties(Unknown Source)
at org.slf4j.impl.StaticLoggerBinder.init(Unknown Source)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(Unknown Source)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at com.accells.MyApplication.<clinit>(MyApplication.java:35)
at sun.reflect.GeneratedSerializationConstructorAccessor7.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:45)
...
我正在使用代码设置回登录配置。Logback配置为:

public static void configure(Context context, String logFileName) {
    String appInfo = String.format(APP_INFO_PATTERN, AppUtils.getVersionName(context), CommunicationManager.API_VERSION, AppUtils.getAndroidVersion(), Build.MODEL);
    String logPattern = LOG_PATTERN.replace("__app__info__", appInfo).replace("%pid", String.valueOf(android.os.Process.myPid()));
    // since we want to reconfigure it
    LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
    lc.reset();

    // add the newly created appenders to the root logger;
    // qualify Logger to disambiguate from org.slf4j.Logger
    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
    root.setLevel(BuildConfig.LOG_LEVEL);

    // use encrypted
    RollingFileAppender<ILoggingEvent> rollingFileAppender = new EncryptedLog4JAppender<>();

    rollingFileAppender.setName("RollingFileAppender");
    rollingFileAppender.setContext(lc);
    rollingFileAppender.setFile(logFileName);
    rollingFileAppender.setAppend(true);

    rollingFileAppender.setImmediateFlush(true);

    SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
    rollingFileAppender.setTriggeringPolicy(triggeringPolicy);
    FileSize fileSize = new FileSize(FileSize.MB_COEFFICIENT);
    triggeringPolicy.setMaxFileSize(fileSize);
    triggeringPolicy.setContext(lc);
    triggeringPolicy.start();

    FixedWindowRollingPolicy fixedWindowRollingPolicy = new FixedWindowRollingPolicy();
    rollingFileAppender.setRollingPolicy(fixedWindowRollingPolicy);
    fixedWindowRollingPolicy.setContext(lc);
    fixedWindowRollingPolicy.setMinIndex(0);
    fixedWindowRollingPolicy.setMaxIndex(1);
    fixedWindowRollingPolicy.setFileNamePattern(MyApplication.getInstance().getCacheFolder() + LOG_FILE_NAME_PATTERN);
    fixedWindowRollingPolicy.setParent(rollingFileAppender);
    fixedWindowRollingPolicy.setContext(lc);
    fixedWindowRollingPolicy.start();

    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(lc);
    encoder.setPattern(logPattern);
    rollingFileAppender.setEncoder(encoder);
    encoder.start();
    rollingFileAppender.start();
    root.addAppender(rollingFileAppender);
    lc.start();

    EnvironmentProxyHelper.getInstance().addLogCatIfNeed(lc, root, logPattern);
}
publicstaticvoid配置(上下文上下文,字符串logFileName){
String appInfo=String.format(APP_INFO_模式,AppUtils.getVersionName(上下文),CommunicationManager.API_版本,AppUtils.getAndroidVersion(),Build.MODEL);
String logPattern=LOG\u PATTERN.replace(“\uuuuu app\uuuu info”,appInfo).replace(“%pid”,String.valueOf(android.os.Process.myPid());
//因为我们想重新配置它
LoggerContext lc=(LoggerContext)LoggerFactory.getILoggerFactory();
lc.reset();
//将新创建的appender添加到根记录器;
//限定记录器以消除org.slf4j.Logger中的歧义
ch.qos.logback.classic.Logger root=(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(Logger.root\u Logger\u NAME);
setLevel(BuildConfig.LOG_级别);
//使用加密的
RollingFileAppender RollingFileAppender=newEncryptedLog4Jappender();
setName(“rollingFileAppender”);
rollingFileAppender.setContext(lc);
rollingFileAppender.setFile(日志文件名);
rollingFileAppender.setAppend(true);
rollingFileAppender.setImmediateFlush(true);
SizeBadeTriggeringPolicy triggeringPolicy=新的SizeBadeTriggeringPolicy();
rollingFileAppender.setTriggeringPolicy(triggeringPolicy);
FileSize FileSize=新文件大小(FileSize.MB_系数);
triggeringPolicy.setMaxFileSize(fileSize);
triggeringPolicy.setContext(lc);
triggeringPolicy.start();
FixedWindowRollingPolicy FixedWindowRollingPolicy=新的FixedWindowRollingPolicy();
rollingFileAppender.setRollingPolicy(fixedWindowRollingPolicy);
fixedWindowRollingPolicy.setContext(lc);
fixedWindowRollingPolicy.setMinIndex(0);
fixedWindowRollingPolicy.setMaxIndex(1);
fixedWindowRollingPolicy.setFileNamePattern(MyApplication.getInstance().getCacheFolder()+日志文件名模式);
fixedWindowRollingPolicy.setParent(rollingFileAppender);
fixedWindowRollingPolicy.setContext(lc);
fixedWindowRollingPolicy.start();
PatternLayoutCoder编码器=新PatternLayoutCoder();
编码器.setContext(lc);
编码器.setPattern(logPattern);
rollingFileAppender.setEncoder(编码器);
encoder.start();
rollingFileAppender.start();
addAppender(rollingFileAppender);
lc.start();
EnvironmentProxyHelper.getInstance().addLogCatIfNeed(lc、root、logPattern);
}
我如何才能永远摆脱NullPointerException?

一种解决方法是尽可能在测试中用作测试运行程序。
public static void configure(Context context, String logFileName) {
    String appInfo = String.format(APP_INFO_PATTERN, AppUtils.getVersionName(context), CommunicationManager.API_VERSION, AppUtils.getAndroidVersion(), Build.MODEL);
    String logPattern = LOG_PATTERN.replace("__app__info__", appInfo).replace("%pid", String.valueOf(android.os.Process.myPid()));
    // since we want to reconfigure it
    LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
    lc.reset();

    // add the newly created appenders to the root logger;
    // qualify Logger to disambiguate from org.slf4j.Logger
    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
    root.setLevel(BuildConfig.LOG_LEVEL);

    // use encrypted
    RollingFileAppender<ILoggingEvent> rollingFileAppender = new EncryptedLog4JAppender<>();

    rollingFileAppender.setName("RollingFileAppender");
    rollingFileAppender.setContext(lc);
    rollingFileAppender.setFile(logFileName);
    rollingFileAppender.setAppend(true);

    rollingFileAppender.setImmediateFlush(true);

    SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
    rollingFileAppender.setTriggeringPolicy(triggeringPolicy);
    FileSize fileSize = new FileSize(FileSize.MB_COEFFICIENT);
    triggeringPolicy.setMaxFileSize(fileSize);
    triggeringPolicy.setContext(lc);
    triggeringPolicy.start();

    FixedWindowRollingPolicy fixedWindowRollingPolicy = new FixedWindowRollingPolicy();
    rollingFileAppender.setRollingPolicy(fixedWindowRollingPolicy);
    fixedWindowRollingPolicy.setContext(lc);
    fixedWindowRollingPolicy.setMinIndex(0);
    fixedWindowRollingPolicy.setMaxIndex(1);
    fixedWindowRollingPolicy.setFileNamePattern(MyApplication.getInstance().getCacheFolder() + LOG_FILE_NAME_PATTERN);
    fixedWindowRollingPolicy.setParent(rollingFileAppender);
    fixedWindowRollingPolicy.setContext(lc);
    fixedWindowRollingPolicy.start();

    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(lc);
    encoder.setPattern(logPattern);
    rollingFileAppender.setEncoder(encoder);
    encoder.start();
    rollingFileAppender.start();
    root.addAppender(rollingFileAppender);
    lc.start();

    EnvironmentProxyHelper.getInstance().addLogCatIfNeed(lc, root, logPattern);
}