Robolectric 测试不调用 textWatcher.onTextChanged
Robolectric Test not calling textWatcher.onTextChanged
我有以下 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 错误。有没有人知道为什么会这样?据我所知,这使用了一个简单的文本观察器,所以它应该可以正常工作?
对于任何好奇的人,我最终将订阅者移动到另一个 class,然后使用 Observable.just("Test") 触发订阅方法并验证它是否被调用。
我有一个类似的问题,在我的情况下 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
)
我有以下 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 错误。有没有人知道为什么会这样?据我所知,这使用了一个简单的文本观察器,所以它应该可以正常工作?
对于任何好奇的人,我最终将订阅者移动到另一个 class,然后使用 Observable.just("Test") 触发订阅方法并验证它是否被调用。
我有一个类似的问题,在我的情况下 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
)