Android单元测试 - “logcat -c”正在更频繁地清除日志

时间:2016-08-08 18:23:52

标签: java android unit-testing logcat

我写了一些单元测试来检查日志记录是否按预期工作。例如,以下是正在测试的方法之一:

// from my SampleObject class
public void configure(Context context) {

    Log.d(TAG, "Configuration done.");
}

我想在每次测试之前刷新LogCat,以便不会获取上一次测试的日志。为此,我编写了一个clearLogs()方法,该方法从setUp()调用:

private void clearLogs() throws Exception {
    Runtime.getRuntime().exec("logcat -c");
}

public void setUp() throws Exception {
    super.setUp();
    clearLogs();
    SampleObject mSampleObject = new SampleObject();
}

这是我的单元测试:

public void testConfigure() throws Exception {
    String LOG_CONFIGURATION_DONE = "Configuration done.";
    boolean stringFound = false;
    mSampleObject.configure(new MockContext());
    Process process = Runtime.getRuntime().exec("logcat -d SampleObject:D *:S");
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    while ((line = bufferedReader.readLine()) != null) {
        if (line.contains(LOG_CONFIGURATION_DONE)) {
            stringFound = true;
            break;
        }
    }
    assertTrue("Log message for configure() not found", stringFound);
}

问题是即使只在clearLogs()中调用setUp(),也会清除日志条目。如果我评论clearLogs(),则测试有效。任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

几周后,我终于找到了原因:logcat -c没有立即清除日志,但需要几秒钟才能完成。但是,该过程从测试应用程序的角度出现。因此,测试用例会在之后立即执行,并在日志仍被清除时运行。添加两秒的短暂延迟解决了问题。