Robolectri c модульные тесты, использующие устаревшие, а не двоичные ресурсы, только при запуске конфигурации модульного тестового запуска модулей - PullRequest
2 голосов
/ 24 марта 2020

У меня есть мультимодульный android проект. У меня есть несколько модульных тестов в каждом модуле, и я всегда мог запустить их все сразу, используя такую ​​конфигурацию запуска:

enter image description here

Во многих моих тестах используется базовый класс, который работает с 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.

Спасибо за любую помощь!

...