Тестирование миграции в комнате Android Abstractmethod Ошибка при переносе

#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 { *; }
 

и сейчас это работает.