2014-12-08 3 views
4

Мне кажется, что я принципиально недопонимаю цель Robolectric. Я боролся с ним уже неделю, и до сих пор получение нового сообщения об ошибке считается прогрессом. Я могу проверить некоторые основные вещи, такие как статические представления в деятельности, но когда что-то более сложные вещи вступают в игру, вещи просто разваливаются. Мне пришлось расширить Robolectric для поддержки 3-х партийных библиотек с определенными параметрами, панелями действий Appcompat и множеством других вещей, которые были чрезвычайно трудоемкими и на самом деле нигде не документированы, и все продвигается довольно гладко. Я начинаю думать, что я использую его неправильно, и он просто не должен делать то, что я хочу.Что тестировать с помощью Robolectric?

Общая логика приложения довольно проста, поэтому на единичный тест не так много, наиболее сложная задача - в пользовательском интерфейсе и удаленных вызовах API. Предполагается ли Robolectric сделать модульное тестирование для Android менее болезненным, чем с JUnit, потому что он может работать на JVM и поддерживает несколько классов Android? Возможно, черная панель для тестирования поведения, такая как Espresso, будет более подходящей для моих нужд? Но мы используем непрерывную интеграцию, и Robolectric был хорош и прост в настройке для запуска тестов на сервере CI, и я бы хотел сохранить его таким образом.

Для чего вы используете Robolectric? Многие сообщения в блогах рекомендуют его для «тестирования жизненного цикла активности», но поскольку я также совершенно новый в мире Android, я не совсем понимаю его цель, тем более, что приложение, которое я тестирую, является только портретистом , Может кто-то, пожалуйста, дайте обзор того, что вы используете Robolectric, и как вы это делаете, предпочтительно с примерами кода и объясните, почему и как эти тесты важны?

+1

Думаю, вам будет лучше в [обмене программистами] (http://programmers.stackexchange.com/tour). Речь идет о концептуальных вопросах. – cheffe

+0

Спасибо за совет, но есть [несколько аналогичный вопрос] (http://programmers.stackexchange.com/questions/178244/in-which-cases-robolectric-is-a-relevant-solution/254149) там, у него нет очень важных ответов, и он закрыт. Здесь я спрашиваю больше о конкретных случаях использования, которые люди используют с примерами кода. – p4sh4

ответ

3

Мы используем его для:

  • модульного тестирования: все компоненты от парсеров и утилит, диспетчеры и ведущих
  • интеграционного тестирования/приема: бизнес-логика приложения, на экран (который попадет в интеграции и/или приемочные испытания)

Мы не используем его для (и было трудно использовать для них):

  • тестирование сетевого уровня (мы запускаем все тесты, вводя тестовые данные таким же образом, как и сетевой уровень; парсеры испытываются отдельно)
  • пользователя проходит через различные экраны

Если вы ищете больше последнего, возможно, Espresso/Robotium лучше подходит для ваших нужд. И вы абсолютно можете запустить их как часть вашего конвейера CI, но вам нужно будет инвестировать некоторое время в настройку или интегрироваться с чем-то вроде Appurify.

Если вам сложно написать свои тесты, возможно, вам придется делать больше с тем, как ваше приложение архивировано, чем то, как вы используете robolectric. См. Мой ответ здесь, он может вам помочь: Writing Android acceptance tests with robolectric: how could it be done?

+0

Хороший ответ, спасибо!Можете ли вы подробнее рассказать о части «пользовательских потоков» - я использую Robolectric для проверки правильности работы/фрагмента на нажатии кнопки или событии, попадает ли она в категорию «бизнес-логика приложения, на экран» , или "пользовательские потоки"? И не могли бы вы дать и пример ваших контрольных и презентационных модульных тестов? – p4sh4

+0

Легко проверить, что для некоторых действий на экране откроется другой экран. Я бы рекомендовал не тестировать сразу два экрана (например, тестовый экран A, перейти к экрану B, затем проверить экран B), что вполне может быть правильным потоком пользователя. Это лучше сделать в тестах пользовательского интерфейса. –

+0

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

Смежные вопросы