2016-11-26 110 views
2

我正在为我公司的一个Android应用程序编写单元测试。由于某些测试检查Logcat输出中是否存在某些行,我想在每次测试运行前清除日志。什么是确保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”的错误。

任何人有任何解决方案?

+3

依赖logcat输出似乎不是编写单元测试的好方法。有一个'Log'的包装(如'Timber')并验证与它的交互似乎是一个更好的方法。 – Emmanuel

回答

0

代替在睡眠任意值()可以尝试这一点:

工艺过程=调用Runtime.getRuntime()EXEC( “logcat的-c”);。 process.waitFor();

相关问题