RxJava2 TestSubscriber assertEmpty всегда true - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь протестировать некоторый код RxJava, используя TestSubsriber.Данные поступают из 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).

Модель сохраняется в БД, поскольку возвращаемое значение из вызова вставки>1. Также увеличивается число строк.

Я попытался запустить тот же самый код из-за пределов тестовой среды (из действия), и там он работает нормально.

1 Ответ

0 голосов
/ 11 июня 2018

Похоже, что ваш DAO работает асинхронно и TestSubscriber не получает ответ немедленно.Измените тест на этот, и он должен работать:

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

testSubscriber.assertNoTimeout();
testSubscriber.assertNoErrors();
testSubscriber.assertValueCount(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...