Sala de pruebas unitarias y LiveData

Actualmente estoy desarrollando una aplicación usando el nuevoComponentes de arquitectura de Android. Específicamente estoy implementando una base de datos de sala que devuelve unLiveDataobjeto en una de sus consultas. La inserción y las consultas funcionan como se esperaba, sin embargo, tengo un problema al probar el método de consulta mediante la prueba unitaria.

Aquí está el DAO que estoy tratando de probar:

NotificationDao.kt

@Dao
interface NotificationDao {

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

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

}

Como puede ver, la función de consulta devuelve unLiveData objeto, si cambio esto para ser solo unList, Cursor o básicamente lo que sea, obtengo el resultado esperado, que son los datos insertados en la Base de Datos.

El problema es que la siguiente prueba siempre fallará porque elvalue delLiveData el objeto es siemprenull:

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 
}

Entonces la pregunta es:¿Alguien sabe de una mejor manera de realizar pruebas unitarias que involucren objetos LiveData?

Respuestas a la pregunta(5)

Su respuesta a la pregunta