2015-04-20 29 views
4

我有以下可观察Robolectric测试没有要求textWatcher.onTextChanged

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()); 
} 

这将失败,通缉但未引发错误。有没有人有任何见解,为什么这会是?据我所知,这使用一个简单的文本观察器,所以它应该只是工作?

+0

我不是RxJava大专家。在哪个线程订阅? –

+0

应该是主线程。我在一个活动的初始化中创建了这个。除非这样的观测只是发生剥离和自己做异步?我知道这肯定会引起robolectric的问题。 –

+0

,以确保我使用.observeOn(AndroidSchedulers.mainThread()),并确保ShadowLoopers.runUIThreadTasks在我的测试中,仍然没有骰子 –

回答

1

对于任何好奇心,我最终都将订阅者移动到另一个类,然后使用Observable.just(“Test”)触发订阅方法并验证它被调用。

1

我在那里我的情况Robolectric测试没有要求TextWatcher.afterTextChanged

这是我发现

EditText nameText = (EditText) mParentView.findViewById(R.id.edit_name); 
nameText.setText(accountName); 
Shadows.shadowOf(nameText).getWatchers().get(0).afterTextChanged(null); 

改变文本后解决类似的问题,我用ShadowTextView.getWatchers得到观察家然后手动调用afterTextChanged方法(或你的情况onTextChange