Как юнит-тестирование Log.e в Android?
Мне нужно выполнить модульный тест, в котором мне нужно проверить, регистрируется ли сообщение об ошибке при возникновении определенного состояния в моем приложении.
try {
//do something
} catch (ClassCastException | IndexOutOfBoundsException e) {
Log.e(INFOTAG, "Exception "+e.getMessage());
}
Как я могу проверить это? Я получаю приведенную ниже ошибку при модульном тестировании.
Caused by: java.lang.RuntimeException: Method e in android.util.Log not mocked.
1 ответ
Есть два способа сделать это:
- Вы поворачиваетесь к Powermock или Powermokito; поскольку эти насмешливые рамки позволят вам смоделировать / проверить этот статический вызов Log.e().
- Вы могли бы рассмотреть вопрос о замене статического вызова.
Пример:
interface LogWrapper {
public void e( whatever Log.e needs);
}
class LogImpl implements LogWrapper {
@Override
e ( whatever ) {
Log.e (whatever) ;
}
И затем, вы должны использовать внедрение зависимостей, чтобы сделать LogWrapper
Объект доступен в классах, которые вы хотите войти. Для обычного "производственного" использования этот объект является просто экземпляром LogImpl
; для тестирования вы можете использовать либо самописанный impl (который отслеживает отправленные ему журналы); или вы можете использовать любую из не-мощных фреймворков (например, EasyMock или Mokito), чтобы имитировать это. А затем вы используете аспект проверки / проверки в системе макетов для проверки "журнал был вызван с ожидаемыми параметрами".
Обратите внимание: в зависимости от ваших настроек, вариант 2 может быть излишним. Но я лично избегаю использования Powermock; просто потому, что я потратил слишком много часов своей жизни, выискивая причудливые проблемы с Powermock. И мне нравится делать измерения покрытия; и иногда Powermock также доставляет вам проблемы.
Но, как вы спрашиваете о Powermock, вы в основном хотите посмотреть здесь (powermockito) или здесь (powermock). И для справки: попробуйте использовать ваш любимый поисковик в следующий раз. Это действительно не так, как вы первый человек, спрашивающий об этом.