Тестирование Android Kotlin.Свойство lateinit _db не было инициализировано - PullRequest
0 голосов
/ 20 октября 2018

Мой код:

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 не было инициализировано

Я действительно не знаю, какпочини это.Пожалуйста, помогите

1 Ответ

0 голосов
/ 18 декабря 2018

У меня возникла такая же проблема при создании теста для базы данных.После нахождения решения для этого я понял, что не объявляю класс AppDatabse как базу данных.И я думаю, что вы сделали ту же ошибку.

Поэтому добавьте аннотацию @ База данных и объявите свою базу данных AppDatabase как базу данных, как показано ниже:

    @Database(entities = [Plant::class], version = 1, exportSchema = false)
    abstract class DbTest {
    ......

Поместите эту строку в абстрактный класс DbTest {

Happy Coding ..!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...