У меня есть проект Android Studio с двумя библиотечными модулями: foo-module
и bar-module
. Каждый реализует библиотеку, foo-module
определяет интерфейс стратегии и bar-module
в зависимости от foo-module
и реализует такую стратегию. foo-module
имеет контрольные тесты (foo-module/src/androidTest/
) для проверки его основного кода, используя реализацию стратегии заглушки, а bar-module
должен иметь свои собственные контрольные тесты.
Я определил класс AbstractTests
в foo-module/src/androidTest/
, который выполняет большую часть фактического тестирования. У меня также есть класс StubTests
в foo-module/src/androidTest/
, который расширяет AbstractTests
и реализует необходимые методы abstract
для завершения тестового примера (обеспечивающего реализацию стратегии и т.д.). Все это отлично работает.
В bar-module/src/androidTest/
я создал класс BarStrategyTests
, предназначенный для зеркального отображения StubTests
, но предоставил стратегию, реализованную в bar-module
. Тем не менее, BarStrategyTests
не может видеть AbstractTests
, хотя у меня есть compile project(':foo-module')
в моем файле build.gradle
, а основные (нетестовые) классы в bar-module
могут отлично работать с основными (не тестируемыми) классами в foo-module
. IOW, в то время как зависимость project()
обрабатывает обычный код, он не обрабатывает код androidTest/
. Я получаю "error: package com.commonsware.foo.test не существует".
Я также попробовал добавить androidTestCompile project(':foo-module')
с тем же результатом.
Каков рецепт обмена тестовым кодом инструментария между модулями?
Временно, я могу клонировать AbstractTests
, но это не большое долгосрочное решение.
Этот вопрос SO > охватывает аналогичную основу для обычной Java. Кто-нибудь пробовал варианты в одном ответе и получил их для работы на инструментальных тестах для Android? Первый вариант (переместить общий тестовый код в еще один модуль как обычный не-тестовый код) кажется правдоподобным, но я понятия не имею, будут ли другие двое работать с плагином com.android.library
вместо плагина java
.