Единичные тесты с JUnit + (Robolectric или Mockito или оба в Android)

Это первый раз, когда я должен написать блок-тесты в Android.

Поэтому я много искал.

  1. Robolectric framewordk – работает на JVM
  2. Mockito Framwork – Издевательские объекты

Поэтому у меня есть некоторые сомнения в Robolectric & Mokito.

  1. Должен ли я использовать Robolectric только с JUnit в Android-приложении?
  2. Должен ли я использовать Mockito только с JUnit в приложении для Android?
  3. Должен ли я пойти с обоими рамками?
  4. В чем разница между Mockito & Robolectric?

У меня есть поиск разницы между Mokito & Robolectric, но для этого нет правильного ответа.

Пожалуйста, предложите.

Solutions Collecting From Web of "Единичные тесты с JUnit + (Robolectric или Mockito или оба в Android)"

У них немного разные привычки, и я склонен использовать их как в своих проектах.

Mockito

Используется для создания издевательства над вашими классами.

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

По возможности, большинство ваших тестов должны использовать mockito. Чтобы сделать это возможным, большинство людей разбивают свой код на MVP и т. Д., Когда бизнес-логика отделена от логики View. Таким образом, ваша бизнес-логика (Presenter) не имеет никаких знаний (или зависимостей) в библиотеке Android и не нуждается в их издевательствах.

Robolectric

Это библиотека, которая содержит много макетов Android- классов.

Тест-драйв Robolectric вводит эти «теневые объекты» вместо реальных классов Android, когда тесты выполняются. Это позволяет запускать тесты на JVM без загрузки экземпляра Android.

При использовании MVP ваш слой «Вид», как правило, реализуется Activity / Fragment, и здесь вы можете использовать Robolectric, чтобы имитировать их.

Заметки

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

Вам также может понадобиться другая библиотека, такая как PowerMock. Это позволяет высмеивать статические классы, такие как Math, или может использоваться для издевательства со статическими классами Android, такими как TextUtils.

Оба используются с JUnit

Только Мокито может охватывать большинство случаев.

Тем не менее, Robolectric также может предоставлять ограниченные возможности для Android-компонентов, таких как Activity или Fragment in Unit Test (не проверка инструментария, которая не зависит от Android SDK), которая не требует эмулятора или устройств и значительно быстрее, чем контрольные тесты.

Мое предложение: используйте Mockito для модульного теста и Espresso для тестирования пользовательского интерфейса, поскольку они являются полуофициальными тестовыми платформами для Android.

Добавьте Robolectric в свой модульный тест, если есть некоторые зависимости от Android SDK.