Как написать тест RXjava 2 для субъекта поведения, абстрагированного от интерфейса - PullRequest
0 голосов
/ 24 июня 2019

У меня есть субъект поведения, который будет DI.У меня тогда есть разные интерфейсы, которые подписываются на этот объект.Ниже приведен очень простой текст, который я пишу, так что я могу в основном ограничить доступ к объектам функции onNext ().Я не могу понять, как написать тест для этого в jUnit.Это RXjava2.Я вижу много постов в блогах, в которых говорится о тестах Observers, testScheduler и т. Д., Но ни один из них не блокируется до тех пор, пока наблюдаемая RX не получит следующий элемент. Моя абстракция не помогает, поэтому я не могу играть с наблюдателями тестов и наблюдаемыми тестами, но это требование.

fun subscribe(subscribeThread: Scheduler, observeThread: Scheduler, next: Consumer<Location>, throwable: Consumer<Throwable>): Disposable {
    return publishSubject
            .subscribeOn(subscribeThread)
            .observeOn(observeThread)
            .subscribe(next, throwable)
}

У меня есть свои тесты ..

 private var consumerResult: Consumer<Val> = Consumer { count++ }

   @Test
    fun `dispose custom and receive updates`() {

    var disposable = myObserver.subscribe(testScheduler, testScheduler, consumerResult, consumerThrowable)
    assertNotNull(disposable)
    assertEquals(0, count)
    subject.onNext(mockVal)
    assertEquals(1, count) // FAILS
}

Что да, я ожидаю, что это не удастся, так как это асинхронный вызов.Однако я не могу понять, как написать это, чтобы я мог проверить свой код .. Обратите внимание, что это первый шаг в гораздо более сложном тесте

1 Ответ

0 голосов
/ 28 июня 2019

Без TestObserver Я не верю, что вы сможете это сделать.Я бы порекомендовал использовать аннотацию @VisibleForTesting и написать методы для передачи Обозревателя вашему Субъекту.

В целом, я не уверен, что знаю, как выПодход позволяет ограничить доступ, так как вы все еще допускаете передачу Consumer в подписку.

...