#android #android-room #android-testing
Вопрос:
Все зависимости комнат выровнены по версии 2.3.0
Я добавил миграцию базы данных комнаты и добавил еще два столбца в существующую таблицу, похоже, она работает нормально, так как при нормальной работе ошибок не возникало.
Я хотел добавить несколько тестов для миграции и сделал это, следуя официальным документам: Тестирование миграции комнатной базы данных
Однако эта строка:
db = helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2);
будет бросать
java.lang.AbstractMethodError: abstract method "void androidx.room.RoomOpenHelper$Delegate.onPreMigrate(androidx.sqlite.db.SupportSQLiteDatabase)"
Я спустился в кроличью нору и androidx.room.testing.MigrationTestHelper.MigratingDelegate
действительно не реализовал onPreMigrate
У кого-нибудь есть реальный образец с миграцией и тестированием, показывающий, как это должно работать ?
Я полностью не в себе или документы уже неверны в зависимости:
testImplementation "androidx.room:room-testing:$room_version"
вероятно, так и должно быть androidTestImplementation
, поскольку это тест на устройстве ? Поиск в Google не дал никаких результатов, значит ли это, что на самом деле никто не использует пакет ?
Ответ №1:
Я, наконец, нашел проблему, это была защита/минимизация.
Сначала я попытался отключить его для test-apk все вместе, добавив testProguardFile 'proguard-test.pro'
в свой build.gradle, с proguard-test.pro содержащий
-dontoptimize
-dontobfuscate
-keepclasseswithmembers class ** { *; }
(на самом деле не нужно никакого сокращения для теста-apk), но это не помогло.
Начиная с androidx.комната.тестирование.MigrationTestHelper.MigratingDelegate не переопределяет androidx.room.RoomOpenHelper$Delegate.onPreMigrate
правило proguard, которое должно фактически перейти в обычный файл ProGuard (для тестируемого APK). Я добавил
-keepclassmembers class androidx.room.RoomOpenHelper$Delegate { *; }
и сейчас это работает.