Разработка 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, возможно, давая макет Контексты и другие издевательские функции, чтобы я мог сделать свои тестовые примеры как можно более независимыми). Любые предложения или указатели будут полезны. Спасибо
Ответы
Ответ 1
Для тестирования вне устройства просмотрите Robolectric
Для тестирования на устройстве просмотрите Borachio
Итог: это все еще очень, очень сложно сделать хорошо. Вещи улучшаются (ситуация сегодня значительно лучше, чем это было 6 месяцев назад), но Android - это самая тестовая среда, в которой я когда-либо писал программы.
Ответ 2
Чтобы делать TDD в Android, я лично использую все следующие функции:
- assertj-android: утверждения для Android
- Mockito: Mocking Framework
- Robolectric: платформа тестирования модулей, которая работает без необходимости эмулятора Android.
- Robotium: тесты пользовательского интерфейса (требуется эмулятор или устройство для запуска)
Также: использование библиотек инъекций зависимостей, таких как Dagger или Roboguice, значительно упростит вашу единичные/интеграционные тесты. Чтобы выполнить тесты на нескольких устройствах, рассмотрите возможность использования Spoon.
Ответ 3
- Я использую ActivityInstrumentationTestCase2 в случае действий для TDD (или скорее BDD) и записываю обычные модульные тесты для всей логики. Это также помогает мне отделять логику от действий.
- Мобильные приложения по своей природе ориентированы на пользовательский интерфейс. Поэтому он не
имеет смысл издеваться над пользовательским интерфейсом, даже если он делает вид Unit test
как функциональный тест.
- Чтобы добавить Extras к намерениям, вы можете установить индивидуальное намерение для теста или сделать это для всех тестов, переопределив настройку.
- 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());
}
}
РЕДАКТИРОВАТЬ: Все изменилось с тех пор, как я опубликовал ответ. Mockito теперь имеет разумную поддержку Android. И для тестов мы перешли из ActivityInstrumentationTestCase2 в Robolectric, просто чтобы задействовать чистую скорость JVM на этапе разработки. Android Testing Framework отлично подходит для интеграции и функционального тестирования, а не для тестов модулей.
Ответ 4
Чтобы применить TDD для android, Android Testing Codelab будет очень полезен для вас. Лаборатория кода показывает использование инструмента тестирования и то, как вы можете применить TDD для android.I пробовал, и это было очень полезно для меня.
Бонус: проверьте Очистить архитектуру
Ответ 5
Библиотека поддержки тестирования Android предоставляет обширную платформу для тестирования приложений Android. Эта библиотека предоставляет набор API-интерфейсов, которые позволяют быстро создавать и запускать тестовый код для ваших приложений, включая тесты JUnit 4 и функционального пользовательского интерфейса (UI). Вы можете запускать тесты, созданные с использованием этих API, из IDE Android Studio или из командной строки.
Подробнее о:
Спасибо:)
Ответ 6
имеем
https://developer.android.com/training/testing/start/index.html
и может тестировать локальный (работает на JVM) и инструментальный тест (работает на устройстве или эмуляторе)
Для этого нам нужно добавить
Android Testing Support Library
Android SDK включает два инструмента для тестирования приложений на уровне функциональности
Обезьяна и обезьянник