Разработка Android-тестов

У меня есть большой опыт в создании приложений для Android. Для моего нового проекта мы решили сделать Test Driven Development (TDD). Я накладываю руки на Robotium для тестирования пользовательских сценариев, и он отлично работает и выглядит просто.

Для модульного тестирования я попытался издеваться над использованием контекста (класс Android MockContext), но я не могу этого сделать. Я просмотрел этот блог http://sites.google.com/site/androiddevtesting/ и через этот http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html , который предлагает Что насмешливые в приложениях для Android все еще очень ограничены и трудны, и предложили использовать PowerMock, jMockit, JeasyTest или Roboelectric (в сочетании с Mockito и Maven) и даже RoboGuice.

Я хотел бы получить от вас предложения, по которым, по вашему мнению, платформа тестирования модулей лучше всего подходит для тестирования приложений Android. (В частности, тестирование классов Android, возможно, давая макет Контексты и другие издевательские функции, чтобы я мог сделать свои тестовые примеры как можно более независимыми). Любые предложения или указатели будут полезны. благодаря

Solutions Collecting From Web of "Разработка Android-тестов"

Для тестирования вне устройства посмотрите на Robolectric

Для тестирования на устройстве посмотрите на Borachio

Итог: все еще очень, очень сложно преуспеть. Вещи улучшаются (ситуация сегодня значительно лучше, чем было 6 месяцев назад), но Android – это самая тестовая среда, для которой я когда-либо писал программы.

Чтобы сделать TDD в Android, я лично использую все следующие:

  • Assertj-android : утверждения для Android
  • Мокито : Издевательская структура
  • Robolectric : платформа тестирования модулей, которая работает без использования эмулятора Android
  • Robotium : тесты пользовательского интерфейса ( требуется эмулятор или устройство для запуска)

Также: использование библиотек инъекций зависимостей, таких как Dagger или Roboguice , значительно упростит ваши тесты на единицу / интеграцию. Чтобы запускать тесты на нескольких устройствах, подумайте об использовании Spoon .

  • Я использую ActivityInstrumentationTestCase2 в случае действий для TDD (или BDD) и записываю обычные модульные тесты для всей логики. Это также помогает мне отделять логику от действий.
  • Мобильные приложения по своей природе ориентированы на пользовательский интерфейс. Поэтому не имеет смысла издеваться над пользовательским интерфейсом, даже если он делает тестирование модуля похожим на функциональный тест.
  • Для добавления дополнений к намерениям вы можете настроить собственное намерение для теста или сделать это для всех тестов, переопределив настройку.
  • Mocks дает много проблем на Android, поэтому я использую заглушки.

Ниже приведен пример. Активность показывает Hello World, когда вы нажимаете кнопку –

public class HelloWorldActivityTest extends ActivityInstrumentationTestCase2<HelloWorldActivity> { private HelloWorld activity; public HelloWorldActivityTest() { super(HelloWorldActivityTest.class); } public void testShouldRenderGreetingOnButtonClick() { activity = this.getActivity(); Button button = (Button) activity.findViewById(R.id.btn_greet); TouchUtils.clickView(this, button); assertEquals("Hello World!", ((TextView) activity.findViewById(android.R.id.greeting_text)) .getText()); } } 

EDIT: Все изменилось с тех пор, как я отправил ответ. Mockito теперь имеет разумную поддержку Android. И для тестов мы перешли из ActivityInstrumentationTestCase2 в Robolectric, просто чтобы задействовать чистую скорость JVM на этапе разработки. Android Testing Framework отлично подходит для интеграции и функционального тестирования, а не для тестирования модулей.

Чтобы применить TDD для Android, Android Testing Codelab будет очень полезен для вас. Лаборатория кода показывает использование инструмента тестирования и то, как вы можете применить TDD для android.I пробовал, и это было очень полезно для меня.

Бонус: проверка чистой архитектуры

Библиотека поддержки тестирования Android предоставляет обширную инфраструктуру для тестирования приложений для Android. Эта библиотека предоставляет набор API-интерфейсов, которые позволяют быстро создавать и запускать тестовый код для ваших приложений, включая тесты JUnit 4 и функционального пользовательского интерфейса (UI). Вы можете запускать тесты, созданные с использованием этих API, из IDE Android Studio или из командной строки.

Узнайте больше о:

  • Эспрессо
  • AndroidJUnitRunner
  • Правила JUnit4
  • Пользовательский интерфейс

Спасибо 🙂

у нас есть

https://developer.android.com/training/testing/start/index.html

И может тестировать локальные (работает на JVM) и инструментальный тест (работает на устройстве или эмуляторе)

Для этого нам нужно добавить

 Android Testing Support Library 

Android SDK включает два инструмента для тестирования приложений на уровне функциональности

Обезьяна и обезьянка