У меня есть мультимодульный android проект. У меня есть несколько модульных тестов в каждом модуле, и я всегда мог запустить их все сразу, используя такую конфигурацию запуска:
Во многих моих тестах используется базовый класс, который работает с RobolectricTestRunner. Этот базовый класс выглядит следующим образом:
@RunWith(RobolectricTestRunner::class)
@Config(application = AndroidTest.ApplicationStub::class,
manifest = Config.NONE,
sdk = [21])
abstract class AndroidTest {
@Suppress("LeakingThis")
@Rule @JvmField val injectMocks = InjectMocksRule.create(this@AndroidTest)
fun application(): Application = ApplicationProvider.getApplicationContext()
internal class ApplicationStub : Application()
}
** При выполнении этих тестов с использованием вышеуказанного конфига я получаю ошибку **
[Robolectric] NOTICE: legacy resources mode is deprecated; see http://robolectric.org/migrating/#migrating-to-40
Это приводит к тому, что многие из моих тестов терпят неудачу с ResourceNotFoundException
Однако, когда я запускаю тесты только в определенном c модуле, все проходит. Это связано с тем, что Robolectri c теперь использует двоичные ресурсы:
[Robolectric] sdk=21; resources=BINARY
Я выполнил инструкции по миграции в файлах build.gradle для каждого модуля, добавив в каждый блок android следующее:
testOptions {
unitTests {
includeAndroidResources = true
returnDefaultValues = true
}
}
Одна подсказка, которую я нашел, но не смог исправить, - это когда я запускаю задачу ALL UNIT TEST:
WARNING: No manifest file found at build/intermediates/merged_manifests/debug/../../library_manifest/debug/AndroidManifest.xml.
Falling back to the Android OS resources only.
No such manifest file: build/intermediates/merged_manifests/debug/../../library_manifest/debug/AndroidManifest.xml
To remove this warning, annotate your test class with @Config(manifest=Config.NONE).
Я пытался, как вы видели, добавить манифест = Config.NONE, который не имел никакого эффекта (и теперь все равно не рекомендуется).
Редактировать: также пытался android .enableUnitTestBinaryResources = true в settings.gradle, но это препятствует сборке приложения из-за его устаревший флаг в текущих инструментах Gradle.
Спасибо за любую помощь!