Tôi hiện đang phát triển một ứng dụng bằng cách sử dụng mới Android Architecture Components. Cụ thể là tôi đang triển khai Cơ sở dữ liệu phòng trả về một đối tượng LiveData
trên một trong các truy vấn của nó. Chèn và truy vấn hoạt động như mong đợi, tuy nhiên tôi gặp vấn đề khi thử nghiệm phương thức truy vấn bằng cách sử dụng kiểm tra đơn vị.Kiểm tra đơn vị Phòng và LiveData
Dưới đây là DAO Tôi đang cố gắng để kiểm tra:
NotificationDao.kt
@Dao
interface NotificationDao {
@Insert
fun insertNotifications(vararg notifications: Notification): List<Long>
@Query("SELECT * FROM notifications")
fun getNotifications(): LiveData<List<Notification>>
}
Như bạn có thể nói, chức năng truy vấn trả về một đối tượng LiveData
, nếu Tôi thay đổi điều này để chỉ là một List
, Cursor
hoặc về cơ bản bất cứ điều gì sau đó tôi nhận được kết quả mong đợi, đó là dữ liệu được chèn vào trong Cơ sở dữ liệu.
Vấn đề là các thử nghiệm sau đây sẽ luôn luôn thất bại vì value
của đối tượng LiveData
luôn null
là:
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
}
Vì vậy, câu hỏi là: Có ai biết cách tốt hơn để thực hiện các bài kiểm tra đơn vị có liên quan đến các đối tượng LiveData?
Có bản cập nhật nào trong phiên bản 1.0.0 không? –