Подтвердить что ты не робот

Разница между тестом Android Instrumentation и Unit test в Android Studio?

Начиная с Android Studio 1.1rc Поддержка тестирования устройств и Мне интересно, какая разница между тестированием аппаратуры Android и модульными тестами.

Как я понимаю:
Модульные тесты полезны для тестирования кода, который не вызывает Android API и тесты на аппаратную платформу Android - это скорее интеграция тесты для тестирования конкретных элементов Android API или компонентов графического интерфейса.

Однако, если вы используете инфраструктуру Robolectric или Mockito в своем модульные тесты, вы можете проверить код Android (без использования устройства), если я не ошибаюсь.


Правильно ли это, или есть большая разница? Если да, то какое использование каждого?

4b9b3361

Ответ 1

Модульные тесты изолируют тестируемый компонент, и именно по этой причине часто используются вместе с каркасами Mocks как Mockito: потому что изолируйте устройство от их зависимостей. Пожалуйста, обратите внимание, что вы говорите об API Android частично, потому что есть также Instrumented Unit tests, а именно Instrumentation является частью Junit пакет, а также классы, расширяющие TestCase как класс AndroidTestCase, являются частью пакета Junit, но позволяют использовать из A) Контекст, который вы можете вызвать с помощью getContext() и B) Ресурсы, которые являются частью Android API! Также, пожалуйста, подумайте, что AndroidTestCase является базовым классом, и есть несколько других классов, которые весьма полезны для расширения этого класса. Они специально тестируют Loaders, ContentProviders и даже Services, а также имеют доступ к API Android. поэтому эти классы обеспечивают среду тестирования JUnit, а также специфичные для Android методы. Теперь с Junit4 есть ServiceTestRule, который распространяется непосредственно из Object и позволяет вам легче тестировать Сервис, хотя вы не можете запустить Intent прямо внутри этого класса.

Тесты на инструментальные средства, они также входят в пакет Junit, но управление Android API довольно тотально, потому что Instrumentation Tests создаются в системе до запуска любого кода приложения и для тестирования вам нужно для открытия реального приложения (эмулятор или телефон, подключенный к USB). Они получают доступ к компонентам Android (например, по кнопке) и жизненному циклу приложения, они обычно медленнее, чем тесты Junit, расширяющие TestCase (те, которые были рассмотрены выше), типичное использование с ActivityInstrumentationTestCase2, которое имеет функциональный подход к тестированию, ориентирован на пользователей.

РЕДАКТИРОВАТЬ: Что касается Roboelectric и Mockito, то есть togheter с Espresso между самыми популярными платформами тестирования на данный момент (13 июля 2016 года), Roboelectric позволяет запускать несколько тестов за считанные секунды, а не минуты, и это очень удобно в командах, которые должны запускать непрерывные тесты и подвержены непрерывной интеграции.

С сайта Robolectric:

Альтернативный подход к Robolectric заключается в использовании макетов, таких как: Mockito или издеваться над Android SDK. Хотя это действительный подход, он часто дает тесты, которые по существу обращаются реализации кода приложения. Roboelectric позволяет использовать тестовый стиль, который ближе к тестированию черного ящика, делая тесты более эффективными для рефакторинга и проведения тестов сосредоточиться на поведении приложения, а не на внедрение Android. Вы все еще можете использовать насмешливую структуру вдоль с Robolectric, если хотите.

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

Ответ 2

Мне кажется, что тестирование аппаратуры - это интеграционное тестирование с возможностью управления жизненным циклом и событиями (onStart, onCreate и т.д.) приложения.

Тестирование модулей, как я понимаю, тестирует Unit (например, Class) для его данных и поведения.

Например, скажем, что у вас есть игра: эта игра работает на активность (основное действие), и у вас есть персонаж, основанный на классе роботов, который имеет 2 метода (огонь и движение). Вы проверили бы основное действие с помощью контрольно-измерительного теста, чтобы убедиться, что он правильно сохраняет, когда вы покидаете приложение, если он восстанавливается правильно при восстановлении и т.д., И вы проверите робота с помощью Unit test, чтобы проверить его атрибуты и поведение.

Отказ от ответственности: Я не человек java, но я проявил интерес к вашему вопросу, и я ответил на него на основе мелкого поиска в Интернете. Вам, вероятно, придется углубиться в это, чтобы найти более подробный ответ.

Ответ 3

ИСПЫТАНИЕ ЕДИНИЦЫ

Единичные тесты, которые выполняются только на вашей локальной машине. Эти тесты скомпилированный для локального запуска в JVM для минимизации времени выполнения. использование этот подход для запуска модульных тестов, не зависящих от Android framework или имеют зависимости, которые могут быть обманчивы.

В основном, вы запускаете простой Java-код для тестирования, например, поставщика контента, подключений к базе данных, ввода и вывода методов. Это не работает на Android. Для запуска вам НЕ требуется устройство.

ИСПЫТАНИЯ ПРИБОРА

Единичные тесты, которые запускаются на устройстве Android или эмуляторе. Эти тесты доступ к информации Instrumentation, такой как контекст приложения под испытаниями. Используйте этот подход для запуска модульных тестов с Android зависимостей, которые макет объектов не может легко удовлетворить.

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

Ссылка: http://developer.android.com/tools/testing/testing_android.html

Ответ 4

enter image description here

Модульные тесты
Малые тесты

Это небольшие, сильно сфокусированные тесты, которые могут выполняться прямо на вашей локальной машине разработки, и, поскольку они выполняются непосредственно в вашей локальной среде, они очень быстрые и их время выполнения очень меньше. Unit тест нацелен на небольшую единицу кода, например, метод или класс. Внешние зависимости должны быть удалены из модульных тестов, например, путем замены зависимости тестовой реализацией или (ложным) объектом, созданным тестовой средой[Mock vs Stub]

Интеграционные тесты
ака средние тесты

Это тесты, которые на самом деле будут выполняться на реальном устройстве, а не на локальном компьютере, и предназначены для проверки интеграции между различными модулями, работающими вместе. Интеграционные тесты способны выявлять такие проблемы, как разводка компонентов, доступ к сети, проблемы с базой данных и т.д.

  • Взаимодействие между представлением и моделью представления
  • Тесты на уровне хранилища приложений...

Сквозные тесты
Функциональныетесты, ака Большие тесты

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

Модульное тестирование:

  • JUnit
  • Mockito
  • PowerMock

Тестирование пользовательского интерфейса:

  • Эспрессо
  • UIAutomator
  • Robotium, Appium, Calabash, Robolectric

Подробнее здесь, здесь, здесь
Как запустить тесты из командной строки здесь

Ответ 5

Модульное тестирование:

Часто модульные тесты называются "локальными тестами" или "локальными тестами". Основная причина этого заключается в том, что вы хотите запускать тесты без подключенного устройства или эмулятора.

Модульные тесты не могут проверить пользовательский интерфейс вашего приложения без насмешливых объектов, таких как Activity.


Контрольно-измерительные приборы:

Контрольно-измерительные приборы выполняются на устройстве или эмуляторе. В фоновом режиме ваше приложение будет установлено, а затем будет также установлено приложение для тестирования, которое будет контролировать ваше приложение, запускать его и запускать тесты пользовательского интерфейса при необходимости.

Инструментальные тесты также могут использоваться для тестирования логики пользовательского интерфейса. Они особенно полезны, когда вам нужно протестировать код, который зависит от контекста.


Ссылка на ссылку, например

Ответ 6

Модульное тестирование

Работает только на локальной машине.

Контрольно-измерительный прибор

Он работает на устройстве Android или эмуляторе. Если вы проверите тестовый пример, он работает на устройстве эмулятора или Android

Ответ 7

https://developer.android.com/training/testing/fundamentals.html#testing-pyramid

Небольшие тесты - это единичные тесты, которые можно выполнять изолированно от производственных систем. Обычно они издеваются над каждым основным компонентом и должны быстро запускаться на вашем компьютере.

Средние тесты - это интеграционные тесты, которые находятся между малыми тестами и большими тестами. Они объединяют несколько компонентов и запускаются на эмуляторах или реальных устройствах.

Большие тесты - это интеграция и тесты UI, которые выполняются путем завершения рабочего процесса пользовательского интерфейса. Они гарантируют, что ключевые задачи конечного пользователя работают как ожидалось на эмуляторах или реальных устройствах.