Получение ClassNotFoundException для GSON при запуске инструментированного теста Android для переноса комнаты - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть проект, для которого я использую Room для хранения, и в настоящее время пытаюсь настроить тест для простой миграции.

Я выполнил шаги, описанные в https://medium.com/androiddevelopers/testing-room-migrations-be93cdb0d975, и получилтест, который выглядит следующим образом:

@RunWith(AndroidJUnit4::class)
class MigrationsTest {

    private val DB_NAME = "test.db"

    private lateinit var testHelper: MigrationTestHelper

    @Before
    fun setup() {
        testHelper = MigrationTestHelper(
            androidx.test.platform.app.InstrumentationRegistry.getInstrumentation(),
            MyDatabase::class.java.canonicalName,
            FrameworkSQLiteOpenHelperFactory()
        )
    }

    @Test
    fun testMigrate1_2() {
        val db = testHelper.createDatabase(DB_NAME, 1)
        db.close()

        testHelper.runMigrationsAndValidate(DB_NAME, 2, true, MyDatabase.MIGRATION_1_2)
    }

}

Однако при запуске теста на физическом устройстве я получаю следующее исключение:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/gson/GsonBuilder;

Сам MigrationTestHelper выглядит нормально,и если я пытаюсь создать объект Gson или GsonBuilder в тесте, я получаю ту же ошибку.

В своих зависимостях я также добавил эти строки (используя Kotlin DSL):

dependencies {
    ... 
    androidTestImplementation("android.arch.persistence.room:testing:1.1.1")
    androidTestImplementation("com.google.code.gson:gson:2.8.0")
}

Работает само приложение, хранилище работает как положено.

Как правильно включить Gson и избежать этой ошибки?Неспособность легко проверить транзакции - это проблема для меня.

1 Ответ

0 голосов
/ 23 февраля 2019

Хорошо, я понял это.Это был просто вопрос охраны.Когда класс не найден, вам просто нужно убедиться, что он не удален.

В моем случае я добавил эту строку в файл proguard

-keep class com.google.gson.** { *; }

И затемпродолжайте добавлять больше инструкций, когда жалуетесь.

...