【发布时间】:2015-04-20 20:54:31
【问题描述】:
我有以下 Observable
Observable<OnTextChangeEvent> subjectObservable = WidgetObservable.text(mComposeSubject);
然后呢
subjectObservable.subscribe(s -> onTextChange(mComposeSubject, getString(R.string.blank_warning, mComposeSubject.getHint().toString())));
我还有以下 Robolectric 测试
@Test
public void testOnTextChange_subjectChanged() {
EmailActivity activity = spy(getActivity());
activity.mComposeSubject.setText("test");
assertThat(activity.mSubjectSubscription).isNotNull();
verify(activity, times(1)).onTextChange(eq(activity.mComposeSubject), anyString());
}
此操作失败,出现 Wanted but not invoked 错误。有没有人知道为什么会这样?据我所知,这使用了一个简单的文本观察器,所以它应该可以工作吗?
【问题讨论】:
-
我不是 RxJava 方面的专家。订阅在哪个线程上?
-
应该是主线程。我在活动的初始化中创建它。除非像这样的 observables 碰巧分拆并自己做异步?我知道这肯定会导致 robolectric 出现问题。
-
所以确保我使用了 .observeOn(AndroidSchedulers.mainThread()) 并确保 ShadowLoopers.runUIThreadTasks 在我的测试中并且仍然没有骰子
-
这是我的第一个建议。它没有用。您是否有公开的代码可以查看并尝试
-
我认为问题在于您正在监视测试中的活动,但您的 RAC 接线仍在使用原始活动。您可以尝试将订阅者提取到另一个可以模拟并在测试中注入的类
标签: android mockito robolectric rx-java