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?