2016-11-26 3 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 дает мне ошибку «недопустимый вариант - Т».

У кого-нибудь есть решения?

+3

Опираясь на вывод logcat, не кажется отличным способом написания модульных тестов. Наличие обертки вокруг «Журнала» (например, «Timber») и проверка взаимодействия с ним кажется лучшим подходом. – Emmanuel

ответ

0

Вместо произвольного значения во время сна(), вы можете попробовать это:

процесса Process = Runtime.getRuntime() Exec ("LogCat -c");. process.waitFor();

Смежные вопросы