Тестирование Android Junit по сравнению с обычным тестированием Junit

Я беру на себя проект Android и хочу ввести модульные тесты в проект, чтобы избежать возможных регрессий.

Для обычных java-проектов у меня есть две исходные папки: src и test. Исходная папка src содержит все мои исходные файлы, а моя исходная папка test содержит все мои модульные тесты, что, я считаю, довольно стандартно для хранения тестов отдельно от исходного кода, поэтому вам не нужно их отправлять.

Я немного читал в Интернете, и подход к приложениям для Android выглядит немного иначе. В нескольких примерах говорится о настройке второго проекта для android test project и последующей ссылки на android project.

Я хочу подтвердить несколько вещей:

  1. Уместно ли иметь второй проект для тестирования, когда дело доходит до тестирования проектов Android, или я просто нахожу плохие примеры?
  2. Должны ли все модульные тесты быть модульными тестами Android? Например. Да, они все должны быть, или нет, я должен смешивать модульные тесты Android и junit, потому что у junit меньше накладных расходов.
  3. Какие дополнительные преимущества дают модульные тесты Android по сравнению с тестами junit? Например. Ручки к эмулятору и т.д.

person James Oravec    schedule 16.04.2013    source источник


Ответы (1)


Уместно ли иметь второй проект для тестирования, когда дело доходит до тестирования проектов Android, или я просто нахожу плохие примеры?

Да, обычно есть отдельный «тестовый проект» для тестирования кода, специфичного для Android. http://developer.android.com/tools/testing/testing_android.html

Должны ли все модульные тесты быть модульными тестами Android? Например. Да, они все должны быть, или нет, я должен смешивать модульные тесты Android и junit, потому что у junit меньше накладных расходов.

Обычно у вас будет смесь, потому что вы не можете протестировать специфичный для Android код на стандартной JVM с обычным JUnit (не без некоторых вспомогательных библиотек, подробнее об этом чуть позже).

На практике я обнаружил, что имеет смысл разделить ваше приложение на простые компоненты JVM и части Android. Например, если вам нужно взаимодействовать с REST API, у вас может быть отдельный компонент, который делает только это и представляет собой обычный Java. Эти типы компонентов можно легко протестировать с помощью стандартного JUnit. Этот тип архитектуры также приводит к более четкому разделению ответственности, а также к более легкому пониманию и сопровождению дизайна. (Такие компоненты могут быть включены в ваше приложение для Android как обычные файлы JAR.)

Какие дополнительные преимущества дают модульные тесты Android по сравнению с тестами junit? Например. Ручки к эмулятору и т.д.

Тестирование Android может быть медленным и болезненным, потому что полный тест Android запускает стек Android в эмуляторе (или на устройстве). Однако тесты Android необходимы для тестирования частей вашего приложения, специфичных для Android, таких как Context/Activity/Service и т. д.

Из-за громоздкости и медленности собственных тестов Android было создано несколько фреймворков, которые имитируют или заглушают части SDK и используют различные подходы, чтобы помочь. Например, вы можете заглянуть в Robolectric и Robotium. (Каждый из них имеет свои плюсы и минусы.)

person Charlie Collins    schedule 16.04.2013