NotificationDaoTest.kt

тоящее время я разрабатываю приложение, используя недавноКомпоненты архитектуры Android, В частности, я реализую комнату базы данных, которая возвращаетLiveDataобъект на одном из его запросов. Вставка и запросы работают, как и ожидалось, однако у меня есть проблема при тестировании метода запроса с использованием модульного теста

Вот DAO, которую я пытаюсь проверить:

NotificationDao.kt

@Dao
interface NotificationDao {

@Insert
fun insertNotifications(vararg notifications: Notification): List<Long>

@Query("SELECT * FROM notifications")
fun getNotifications(): LiveData<List<Notification>>

}

Как вы можете сказать, функция запроса возвращаетLiveData объект, если я изменю это, чтобы быть простоList, Cursor или, в принципе, тогда я получу ожидаемый результат - данные, вставленные в базу данных.

Проблема в том, что следующий тест всегда будет неудачным, потому чтоvalue изLiveData объект всегдаnull:

NotificationDaoTest.kt

lateinit var db: SosafeDatabase
lateinit var notificationDao: NotificationDao

@Before
fun setUp() {
    val context = InstrumentationRegistry.getTargetContext()
    db = Room.inMemoryDatabaseBuilder(context, SosafeDatabase::class.java).build()
    notificationDao = db.notificationDao()
}

@After
@Throws(IOException::class)
fun tearDown() {
    db.close()
}

@Test
fun getNotifications_IfNotificationsInserted_ReturnsAListOfNotifications() {
    val NUMBER_OF_NOTIFICATIONS = 5
    val notifications = Array(NUMBER_OF_NOTIFICATIONS, { i -> createTestNotification(i) })
    notificationDao.insertNotifications(*notifications)

    val liveData = notificationDao.getNotifications()
    val queriedNotifications = liveData.value
    if (queriedNotifications != null) {
        assertEquals(queriedNotifications.size, NUMBER_OF_NOTIFICATIONS)
    } else {
        fail()
    }
}

private fun createTestNotification(id: Int): Notification {
    //method omitted for brevity 
}

Итак, вопрос:Кто-нибудь знает лучший способ выполнения модульных тестов, которые включают объекты LiveData?

Ответы на вопрос(2)

Ваш ответ на вопрос