Android 房间'的订户;返回Flowable的s DAO方法未通知有关插入实体的信息
我有一个包含一个实体和DAO的房间数据库,它允许插入对象并观察Android 房间'的订户;返回Flowable的s DAO方法未通知有关插入实体的信息,android,rx-java2,android-room,Android,Rx Java2,Android Room,我有一个包含一个实体和DAO的房间数据库,它允许插入对象并观察SELECTqueryasFlowable。当我订阅这个Flowable并在数据库中插入一个新对象时,不会得到新的结果 @Database(entities = [User::class], version = 1) abstract class TestDatabase : RoomDatabase() { abstract val dao: UserDao } @Dao interface UserDao { @
SELECT
queryasFlowable
。当我订阅这个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)
失败:
java.lang.AssertionError: Expected: [User(id=0, name=George)] (class: SingletonList), Actual: [] (latch = 1, values = 0, errors = 0, completions = 0)
如果在调用观察者之前完成了插入,则测试通过:
dao.insert(user)
dao.observeUsers().test().assertValue(listOf(user))
我做错了什么?我猜您没有等待足够长的时间来观察插入的结果。如果insert
在内部是异步的(即使您没有使用rxjavaapi定义它),那么您可能过早地订阅和测试单个值
在断言单个值之前,请尝试使用tester方法(因为您有一个无限的可流动
,所以等待终端事件
当然不起作用):
dao.observeuser()
.test()
.waitcount(1,TestWaitStrategy.SLEEP_10MS,5000)
.assertValue(用户列表);
我猜您没有等待足够长的时间来观察插入结果。如果insert
在内部是异步的(即使您没有使用rxjavaapi定义它),那么您可能过早地订阅和测试单个值
在断言单个值之前,请尝试使用tester方法(因为您有一个无限的可流动
,所以等待终端事件
当然不起作用):
dao.observeuser()
.test()
.waitcount(1,TestWaitStrategy.SLEEP_10MS,5000)
.assertValue(用户列表);
dao.insert(user)
dao.observeUsers().test().assertValue(listOf(user))