我正在为我公司的某个Android应用编写单元测试。由于某些测试会检查Logcat输出中是否存在某些行,因此我希望在每次测试运行之前清除日志。
我知道这样做的基本命令是logcat -c
。此过程不是即时的并且需要几秒钟,但由于它发生在单独的线程上,因此测试用例中的下一个命令将立即执行并可能返回不正确的结果。一种解决方法是添加强制等待。所以我的基本代码如下:
private void clearLogs() throws Exception {
Runtime.getRuntime().exec("logcat -c");
Thread.sleep(2000);
}
到目前为止,这一切都没有问题。但是,我的经理希望代码能够处理清除日志需要任意时间的情况。例如,假设存在一种假设情况,即清除日志需要20秒。我该怎么做呢?
我找到了一个解决方案,涉及创建一个过滤器,只获取在特定时间戳后写入的条目:
NOW=$(date +"%m-%d %H:%M:%S.000") ; adb logcat -T "$NOW"
这通常会消除完全清除loogs的需要。然而,它并不适合我,因为Logcat给了我一个"无效选项 - T"错误。
有人有任何解决方案吗?
答案 0 :(得分:0)
而不是sleep()中的任意值,你可以试试这个:
Process process = Runtime.getRuntime()。exec(“logcat -c”); process.waitFor();