我的代码:

abstract class DbTest {

    @Rule
    @JvmField
    val countingTaskExecutorRule = CountingTaskExecutorRule()

    private lateinit var _db : AppDatabase

    val db: AppDatabase
        get() = _db

    @Before
    fun initDb() {
        _db = Room.inMemoryDatabaseBuilder(
                InstrumentationRegistry.getInstrumentation().context,
                AppDatabase::class.java
        ).build()
    }

    @After
    fun closeDb() {
        countingTaskExecutorRule.drainTasks(10, TimeUnit.SECONDS)
        _db.close()
    }
}

@RunWith(AndroidJUnit4::class)
class PlantDaoTest : DbTest() {

    @get:Rule
    var instantTaskExecutorRule = InstantTaskExecutorRule()

    @Test
    fun insert_one_plant() {
        val plant = Plant(plantId = 1, name="Plant1")
        db.plantDao.insertOnePlant(plant)

        val retrievedPlant = db.plantDao.getPlant(1)
        assert(plant.name==retrievedPlant.name)

    }
}

当我运行PlantDaoTest时,我看到此错误:
kotlin.UninitializedPropertyAccessException:lateinit属性_db尚未初始化

我真的不知道该如何解决。请帮忙

最佳答案

我遇到了同样的错误,我要解决的问题是将annotationProcessor的所有匹配项更改为kapt
在应用程序级别build.gradle中。

从:

 annotationProcessor 'androidx.room:room-compiler:2.2.3'

至:
kapt 'androidx.room:room-compiler:2.2.3'

然后,将以下行添加到文件顶部:
apply plugin: 'kotlin-kapt'

希望能帮助到你

关于Android Kotlin测试。 lateinit属性_db尚未初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52903664/

10-13 04:39