RxJava2 TestSubscriber assertEmpty always true



我正在尝试使用TestSubsriber测试一些RxJava代码。数据来自RoomORM作为Flowable<Task>

这就是我的DAO类现在的样子。

@Dao
public interface TaskDao {
@Insert()
long insertTask(TaskEntity task);
@Delete
int deleteTask(TaskEntity task);
@Query("SELECT * FROM task_table WHERE status = :taskStatus ORDER BY created_at DESC")
Flowable<List<TaskEntity>> getAllTasks(String taskStatus);
@Query("SELECT * FROM task_table WHERE id = :taskId")
Flowable<TaskEntity> getTask(String taskId);
@Update()
int updateTask(TaskEntity updatedTask);
@Query("SELECT COUNT(*) FROM task_table")
int rowCount();
}

我正在尝试测试getTask()方法。这里是失败的确切测试方法。

@Test
public void getTask_getSavedTask_returnsTask() {
Long resp = mTaskDao.insertTask(taskEntity);
assertThat(resp, is(1L));
assertThat(mTaskDao.rowCount(), is(1));
Flowable<TaskEntity> response = mTaskDao.getTask(taskEntity.getTaskId());
TestSubscriber<TaskEntity> testSubscriber = new TestSubscriber<>();
response.subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertValueCount(1);
}

此代码段在testSubscriber.assertValueCount(1)方法上失败。

模型保存在 db 中,因为插入调用的返回值> 1。行数也在增加。

我尝试从测试环境外部(从活动(运行相同类型的代码,它在那里工作正常。

看起来你的 DAO 是异步运行的,TestSubscriber不会立即收到答案。将测试更改为此测试,它应该可以工作:

testSubscriber.awaitCount(1, BaseTestConsumer.TestWaitStrategy.SLEEP_1MS, 5000);
testSubscriber.assertNoTimeout();
testSubscriber.assertNoErrors();
testSubscriber.assertValueCount(1);

相关内容

  • 没有找到相关文章

最新更新