我写了一些单元测试来检查日志记录是否按预期工作。例如,以下是正在测试的方法之一:
// 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()
,则测试有效。任何人都知道我做错了什么?
答案 0 :(得分:0)
几周后,我终于找到了原因:logcat -c
没有立即清除日志,但需要几秒钟才能完成。但是,该过程从测试应用程序的角度出现。因此,测试用例会在之后立即执行,并在日志仍被清除时运行。添加两秒的短暂延迟解决了问题。