У меня есть база данных Room с одной сущностью и DAO, которая позволяет вставлять объекты и наблюдать запрос SELECT
как Flowable
.Когда я подписываюсь на это Flowable
и затем вставляю новый объект в базу данных, новые результаты не выдаются.
@Database(entities = [User::class], version = 1)
abstract class TestDatabase : RoomDatabase() {
abstract val dao: UserDao
}
@Dao
interface UserDao {
@Insert
fun insert(user: User)
@Query("SELECT * FROM User")
fun observeUsers(): Flowable<List<User>>
}
@Entity
data class User(@PrimaryKey val id: Int, val name: String)
Неудачный тест:
@RunWith(AndroidJUnit4::class)
class ObserveUsersTest {
@Test
fun observeUsersTest() {
val db = Room.inMemoryDatabaseBuilder(
InstrumentationRegistry.getContext(), TestDatabase::class.java
).build()
val dao = db.dao
val user = User(0, "George")
val test = dao.observeUsers().test()
dao.insert(user)
test.assertValue(listOf(user))
db.close()
}
}
Ошибка:
java.lang.AssertionError: Expected: [User(id=0, name=George)] (class: SingletonList), Actual: [] (latch = 1, values = 0, errors = 0, completions = 0)
Тест проходит, если вставка выполнена до вызова observeUsers
:
dao.insert(user)
dao.observeUsers().test().assertValue(listOf(user))
Что я делаю не так?