it-swarm.com.ru

Разница между тестированием Android Instrumentation и модульным тестом в Android Studio?

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

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

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


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

54
Joen93

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

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

Правка: Что касается Roboelectric и Mockito, которые вместе с Espresso находятся между самыми популярными средами тестирования на данный момент (13 июля 2016 г.), Roboelectric позволяет вам запускать несколько тестов в считанные секунды, а не минуты, и это очень удобно в командах которые должны запускать непрерывные тесты и подлежат непрерывной интеграции.

С сайта Robolectric:

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

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

27
trocchietto

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

Модульное тестирование, насколько я понимаю, это тестирование модуля (например, класса) на предмет его данных и поведения. 

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

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

40
gemantzu

UNIT TESTING

Модульные тесты, которые запускаются только на вашем локальном компьютере. Эти тесты скомпилировано для локального запуска на JVM, чтобы минимизировать время выполнения. Использование этот подход для запуска модульных тестов, которые не зависят от Android Framework или имеют зависимости, которые могут удовлетворить макет объектов.

В общем, вы запускаете простой Java-код для тестирования, например, поставщика контента, соединений с базой данных, ввода и вывода методов. Это не работает на Android. Чтобы запустить его, вам не нужно устройство.

ИНСТРУМЕНТАЛЬНОЕ ИСПЫТАНИЕ

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

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

Ссылка: http://developer.Android.com/tools/testing/testing_Android.html

21
Isaac Urbina

 enter image description here

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

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

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

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

Сквозные тесты

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

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

  • JUnit
  • Mockito
  • PowerMock

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

  • Эспрессо
  • UIAutomator
  • Роботий, Аппиум, Калабаш, Робоэлектрик

Читать дальше здесь и здесь

3
yoAlex5

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

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

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

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

0
ViT-Vetal-

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

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

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


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

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

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


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

0
akhilesh0707

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

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

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

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

0
mathi