我正在尝试使用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 中,因为插入调用的返回值> 1。行数也在增加。
我尝试从测试环境外部(从活动(运行相同类型的代码,它在那里工作正常。
看起来你的 DAO 是异步运行的,TestSubscriber
不会立即收到答案。将测试更改为此测试,它应该可以工作:
testSubscriber.awaitCount(1, BaseTestConsumer.TestWaitStrategy.SLEEP_1MS, 5000);
testSubscriber.assertNoTimeout();
testSubscriber.assertNoErrors();
testSubscriber.assertValueCount(1);