2015-04-20 28 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