我的代码:
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/