单元测试 - 验证 Observable 是否已订阅 [英] Unit Test - Verify Observable is subscribed

查看:34
本文介绍了单元测试 - 验证 Observable 是否已订阅的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的java代码

I have got the java code like this

 mDataManager.getObservable("hello").subscribe( subscriber );

我想验证下面的Observable是.subscribe()

and I want to verify the following Observable is being .subscribe()

我试图模拟 getObservable()verify

 Observable<Response> res = mock(Observable.class);
 when(mDataManager.getObservable("hello")).thenReturn(res);
 verify(res).subscribe();

但是有一个错误

Caused by: java.lang.IllegalStateException: onSubscribe function can not be null.
at rx.Observable.subscribe(Observable.java:8167)
at rx.Observable.subscribe(Observable.java:8158)
at rx.Observable.subscribe(Observable.java:7962)
....
Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: omni.neo.hk.omniapiservice.v4.model.external.UserLoginBean.class
at rx.exceptions.OnErrorThrowable.addValueAsLastCause(OnErrorThrowable.java:109)
at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:187)
at rx.internal.operators.OperatorDoOnEach$1.onNext(OperatorDoOnEach.java:82)
... 48 more

我认为不可能在这里mock一个Observable,但是没有一个模拟的Observable我不能做verify(res).subscribe()

I think it is not possible mock an Observable here, but without an mocked Observable I cannot doverify(res).subscribe()

在这种情况下有什么建议吗?

Any suggestion in this case?

推荐答案

我发现 RxJava 提供了一个名为 TestSubject

I found that RxJava provides a class called TestSubject

你可以像这样创建它

private TestScheduler eventsScheduler = new TestScheduler();
private TestSubject<MyEvent> eventObservable = TestSubject.create(eventsScheduler);

这将为您提供返回布尔值的方法 hasObservers().

This will provide you with the method hasObservers() which returns a boolean.

@Test
public void testSubscription(){
    myTestClass.init(eventObservable);

    assertTrue(eventObservable.hasObservers());
}

此外,TestSubject 允许您完美地确定应该发送事件的时间.

Also the TestSubject allows you to perfectly time when events should be sent.

eventObservable.onNext(new MyEvent());
eventsScheduler.triggerActions(); 

这篇关于单元测试 - 验证 Observable 是否已订阅的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆