Как мы наследуем классы тестов через модули библиотеки Android?

У меня есть проект 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 foo-module/src/androidTest/ и реализует необходимые abstract методы для завершения тестового примера (обеспечивая реализацию стратегии и т. Д.). Все это отлично работает.

В bar-module/src/androidTest/ я создал класс BarStrategyTests , предназначенный для зеркалирования StubTests , но предоставляющий стратегию, реализованную в bar-module . Тем не менее, BarStrategyTests не может видеть AbstractTests , хотя я BarStrategyTests compile project(':foo-module') в файле build.gradle , а основные (не-тестовые) классы в bar-module могут отлично работать с основным (не- Test) в foo-module . IOW, в то время как зависимость project() обрабатывает обычный код, он не обрабатывает androidTest/ code. Я получаю "error: package com.commonsware.foo.test не существует".

Я также попытался добавить androidTestCompile project(':foo-module') с тем же результатом.

Каков рецепт обмена тестовым кодом между модулями?

Временно я могу клонировать AbstractTests , но это не очень долгое решение.

Этот вопрос SO похож на почву для обычной Java. Кто-нибудь пробовал варианты в одном ответе и получил их для работы на аппаратных тестах для Android? Первый вариант (переместить общий тестовый код в еще один модуль как обычный не-тестовый код) кажется правдоподобным, но я понятия не имею, будут ли другие двое работать с плагином com.android.library а не с java плагином.

В связи с тем, что все тестовые классы (блок и приборы) не являются частью какого-либо модуля, включая aar, они недоступны через зависимость от этого модуля. Я столкнулся с этой проблемой и решил ее, создав test-module и разместив в нем все необходимые классы ( src/main/java ). Таким образом, в вашем случае вы можете перемещать AbstractTests в этом модуле и использовать этот модуль в качестве зависимости androidTestCompile .