Android Test Driven Development - PullRequest
44 голосов
/ 07 июня 2011

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

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

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

Ответы [ 6 ]

30 голосов
/ 12 июня 2011

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

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

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

17 голосов
/ 02 мая 2014

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

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

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

4 голосов
/ 22 августа 2012
  • Я использую ActivityInstrumentationTestCase2 в случае действий для TDD (или, скорее, BDD), и пишу обычные модульные тесты для всей логики. Это также помогает мне отделить логику от действий.
  • Мобильные приложения по своей природе ориентированы на пользовательский интерфейс. Поэтому это не имеет смысл макетировать пользовательский интерфейс, даже если он заставляет модульный тест выглядеть как функциональный тест.
  • Для добавления дополнений к намерениям вы можете установить собственное намерение для теста или сделать это для всех тестов, переопределив настройку.
  • Моды дают много проблем на 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 отлично подходит для интеграции и функционального тестирования, но не для модульных тестов.

2 голосов
/ 11 января 2016

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

Бонус: чек Чистая архитектура

1 голос
/ 10 января 2017

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

Подробнее о:

Спасибо:)

0 голосов
/ 03 октября 2016

у нас есть

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

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

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

Android Testing Support Library

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

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

...