在为室内迁移运行Android Instrumented测试时获取GSON的ClassNotFoundException

问题描述 投票:0回答:1

我有一个项目,我正在使用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本身似乎很好,如果我尝试在测试中创建一个GsonGsonBuilder对象,我会得到同样的错误。

在我的依赖项中,我还添加了这些行(使用Kotlin DSL):

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

运行应用程序本身很好,存储按预期工作。

包含Gson并避免此错误的正确方法是什么?对我来说,无法轻松测试交易是一个问题。

android android-room android-testing
1个回答
0
投票

好吧我明白了。这只是一个问题。每当找不到一个班级时,你只需要确保它没有被剥离。

就我而言,我将此行添加到我的proguard文件中

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

然后在投诉时不断添加更多说明。

© www.soinside.com 2019 - 2024. All rights reserved.