Je suis en train de développer une application en utilisant le tout nouveau Android des Composants de l'Architecture. Plus précisément, je suis à la mise en œuvre d'une Chambre de Base de données qui renvoie un LiveData
objet sur un de ses requêtes. De l'Insertion et de l'interrogation fonctionne comme prévu, mais j'ai un problème de test de la méthode de requête à l'aide du test de l'unité.
Ici, c'est le DAO, je suis en train de tester:
NotificationDao.kt
@Dao
interface NotificationDao {
@Insert
fun insertNotifications(vararg notifications: Notification): List<Long>
@Query("SELECT * FROM notifications")
fun getNotifications(): LiveData<List<Notification>>
}
Comme vous pouvez le dire, la fonction de requête renvoie un LiveData
objet, si je change ce sera juste un List
, Cursor
ou essentiellement n'importe quel puis-je obtenir le résultat escompté, qui est l'insertion de données dans la Base de données.
Le problème est que le test suivant, toujours voués à l'échec parce que l' value
de la LiveData
objet est toujours 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
}
La question est donc: est-ce quelqu'un connaît une meilleure façon d'effectuer des tests unitaires qui impliquent LiveData objets?