Gradle, Robolectric и Espresso

Кто-нибудь успешно заставил Robolectric и Espresso работать (вместе) при сборке с Gradle (Android Studio)?

Я заставил Robolectric работать в Android Studio во многом благодаря сообщению Питера Фризе http://www.peterfriese.de/android-testing-with-robolectric/, но я не знаю, как интегрировать Espresso из-за коллизий toolsRunner/instrumentTest.

В идеале у меня была бы структура каталогов, подобная следующей:

 |--src
    └── main (application source - exists)
    └── test (Robolectric unit tests go here - exists)
    └── testEspresso [*new*] (espresso tests go here)

Мои знания Gradle+Android не очень обширны, и я не уверен, действительно ли это осуществимо (уровни времени, сложности и хрупкости не слишком велики), учитывая текущее состояние Gradle+Android, и если оно , как это сделать. Также, если это имеет значение, у меня есть 2 разных варианта сборки.


person loeschg    schedule 02.12.2013    source источник
comment
@RobertHarvey Я думаю, что под выполнимым я имею в виду, не являются ли уровни времени, сложности и хрупкости предлагаемого решения ужасными. Я обновил свой пост, чтобы отразить это :)   -  person loeschg    schedule 03.12.2013
comment
@loeschg - Были ли у вас проблемы с robolectric, видящим ваши ресурсы? У меня тоже есть несколько вариантов сборки, и robolectric не видит моих ресурсов.   -  person Peter Ajtai    schedule 03.01.2014
comment
@PeterAjtai Я нашел эту статью Питера Фризе очень полезной. Посмотрите, поможет ли это решить проблему. У меня также есть несколько различных вкусов сборки. peterfriese.de/android-testing-with-robolectric   -  person loeschg    schedule 05.01.2014
comment
@loescg спасибо, да, это очень полезно. я заставил его работать, но похоже, что robolectric не знает о вариантах сборки, поэтому для тестов пришлось загрузить отдельную конфигурацию сборки без вкуса.   -  person Peter Ajtai    schedule 06.01.2014


Ответы (2)


Чтобы увидеть хороший пример совместной работы Robolectric и Espresso, ознакомьтесь с этим примером проекта, созданным командой Robolectric:

https://github.com/robolectric/deckard-gradle

person plackemacher    schedule 31.03.2014

Другой вариант, который не включает какие-либо хаки, плагины Gradle, плагины IDE или редактирование IML, — это http://blog.blundellapps.co.uk/android-gradle-app-with-robolectric-junit-тесты/. Джейк Уортон рекомендовал этот подход. При этом ваши тесты Robolectric находятся в отдельном модуле Java, отдельном от вашего основного проекта. Код эспрессо живет с вашим основным проектом.

Использование двойного эспрессо JW (https://github.com/JakeWharton/double-espresso) упростит включение эспрессо и связанного с ним безумия управления зависимостями.

Упомянутое @plackemacher решение, deckard-gradle, по-прежнему является вариантом и поддерживается, хотя для работы с IDE требуется некоторый взлом/операция.

Обновление: см. здесь обсуждение Robolectric и Gradle (относится к Gradle): https://groups.google.com/forum/#!topic/robolectric/xsOpEwtdTi4./discussion

Обновление: хотя я им не пользовался, похоже, это тикет. https://github.com/JakeWharton/double-espresso.


На данный момент я решил создать отдельную ветку Espresso (git), в которой есть правильный набор testRunner и тестового каталога. Не очень элегантное решение... требует некоторой бдительности, чтобы поддерживать все в актуальном состоянии, но пока оно работает!

Обязательно изменю ответ, если кто-то найдет лучшее решение.

person loeschg    schedule 25.12.2013
comment
Как он ведет себя в долгосрочной перспективе? Я боюсь, что ветвление - довольно плохая идея для такого варианта использования... - person fstephany; 24.02.2014
comment
Я больше не работаю над проектом, для которого это было сделано, поэтому я не могу комментировать: P. Смотрите мой обновленный ответ. - person loeschg; 24.02.2014
comment
@fstephany Я бы определенно сказал, НЕ создавайте отдельную ветку, как я предложил. Сейчас есть более надежные способы сделать это. Я обновляю свой ответ. - person loeschg; 07.10.2014
comment
О, круто! Спасибо за обновление. Здесь определенно проблема с инструментами, но, похоже, все сглаживается ... - person fstephany; 08.10.2014