我正在尝试使用TestSubsriber
测试一些RxJava代码。数据来自Room
ORM 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中,因为insert call的返回值是&gt;行数也在增加。
我尝试从测试环境外部(从活动中)运行相同类型的代码,并且它在那里工作正常。
答案 0 :(得分:1)
看起来您的DAO异步运行,TestSubscriber
没有立即收到答案。将测试更改为此,它应该可以工作:
testSubscriber.awaitCount(1, BaseTestConsumer.TestWaitStrategy.SLEEP_1MS, 5000);
testSubscriber.assertNoTimeout();
testSubscriber.assertNoErrors();
testSubscriber.assertValueCount(1);