Миграция комнаты тестирования, Не удается найти файл схемы в папке ресурсов [комната-миграция] - PullRequest
1 голос
/ 01 ноября 2019

Эта проблема возникла после того, как я решил добавить еще одну сущность в базу данных комнаты. Схема экспортируется в ожидаемый каталог. Все настройки build.gradle сделаны и, кажется, работают, но это не так. Так как я получил:

java.io.FileNotFoundException: Cannot find the schema file in the assets folder. Make sure to include the exported json schemas in your test assert inputs. 
See https://developer.android.com/training/data-storage/room/migrating-db-versions#export-schema for details. Missing file: com.company.companyapp.db.AppStore/1.json

Фактически обе схемы json генерируются, но исполнитель теста не может найти такие файлы. Вот настройка gradle:

testOptions.unitTests.includeAndroidResources = true

defaultConfig {
    ...
    multiDexEnabled true
    javaCompileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation": "$projectDir/store".toString()]
        }
    }

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    android.compileOptions.sourceCompatibility 1.8
    android.compileOptions.targetCompatibility 1.8
}

sourceSets {
    androidTest.assets.srcDirs += files("$projectDir/store".toString())
}

dependencies {
    def roomVersion = '2.2.1'
    // Other deps ...
    implementation "androidx.room:room-runtime:$roomVersion"
    implementation "androidx.room:room-rxjava2:$roomVersion"
    annotationProcessor "androidx.room:room-compiler:$roomVersion"
    testImplementation "androidx.room:room-testing:$roomVersion"

    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    androidTestImplementation "androidx.test:core:$testCoreVersion"
    androidTestImplementation "androidx.test.ext:junit:$extJUnitVersion"
    testImplementation "androidx.test:core:$testCoreVersion"
    testImplementation "androidx.test.ext:junit:$extJUnitVersion"
    testImplementation "org.robolectric:robolectric:4.2.1"
}

Я также отмечаю, что Studio IDE отмечает держатель каталога схемы json enter image description here

Изучая примеры миграции из комнаты GoogleЯ вижу, что есть разница, и речь не идет о названии.
enter image description here

Так что очень ясно, что плагин Gradle делает что-то отличное от моего спектра или документацииговорит, что должно работать, но это не так.

at androidx.room.testing.MigrationTestHelper.loadSchema(MigrationTestHelper.java:320)
at androidx.room.testing.MigrationTestHelper.createDatabase(MigrationTestHelper.java:152)
at com.company.companyapp.MigrationTest.migrate1To2(MigrationTest.java:32)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Попробуйте использовать это:

sourceSets {
   androidTest.assets.srcDirs += files("store".toString())
}

В соответствии с документацией , аргументом является

CharSequence, включая String или GString. Интерпретируется относительно в каталоге проекта согласно файлу (объект)

(выделено мной)

0 голосов
/ 08 ноября 2019

Вы должны обернуть его в android :

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation":
                             "$projectDir/schemas".toString()]
            }
        }
    }
}

Затем построить проект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...