Функциональные тесты в Android. Как дождаться результата фрагмента?

#android #testing #handler

#Android #тестирование #обработчик

Вопрос:

Я пытаюсь добавить тест в довольно большой проект Android. Итак, я могу добавить тест, как к activity, так и к fragments, и заставить их работать правильно. Но в моем случае большинство фрагментов при запуске запускают Runnable в новый поток. Этот поток подключается к API, запрашивает и анализирует данные и возвращает их обработчику в вызывающем фрагменте. Вопрос в том, как я должен попросить тест подождать, пока обработчик не извлечет данные, чтобы я мог проверить их значения?

Ответ №1:

Как насчет того, чтобы вместо ожидания возврата значений от реальных объектов. Вы создаете фиктивные объекты, которые могут мгновенно возвращать любое желаемое значение. Mockito — отличный фреймворк для создания макетов, который очень прост в использовании на Android.

http://code.google.com/p/mockito/

Способ, которым вы собираетесь его использовать, заключается в создании макетных объектов в отличие от реальных объектов, и вам нужно найти «швы», чтобы вставить их в свои тесты. С помощью макетного объекта вы можете заставить его возвращать любое значение, которое вы хотите, для любого из его методов. С помощью макетного объекта вы можете изолировать зависимости. Поэтому в вашем примере вы можете захотеть создать фиктивные объекты, которые имитируют объект, подключающийся к api, потому что тогда вы можете возвращать любое значение, необходимое вашим тестам, чтобы сервер мог вернуться для тестирования любой части вашего приложения, которое вы тестируете. Например, если вы проверяете, открывается ли действие регистрации, если сервер возвращает, что пользователь ввел неправильный пароль, вы создаете макет объекта, который вернет false вашему действию, а затем вставляете его туда, где должен быть реальный объект.

У большинства людей возникают проблемы с тестированием существующего кода (который не был создан с учетом тестируемости), потому что обычно нет никаких швов для вставки тестовых объектов. Ознакомьтесь с этим замечательным блогом о том, как сделать код более тестируемым. В нем содержится действительно отличный совет.

http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-decided-to.html

Комментарии:

1. …Я не думал об этом. Вы абсолютно правы, я собираюсь попробовать!

2. Кажется, это очень хорошая библиотека, но я действительно не в состоянии понять преимущества ее использования. В чем отличие от создания моих объектов вручную?!