android - Prueba de RxBinding RxSearchView
rx-java android-appcompat (1)
Para probar RxBindings, simplemente utilicé Espresso y configuré la debounce
de debounce
en 0 (el tiempo de rebote como estática pública, y en el método de configuración de espresso setUp()
puse en 0). Entonces solo
onView(withId(yourId)).perform(ViewActions.replaceText(to something))
y simplemente verifique su Mockito o algo similar con throttleLast()
operador throttleLast()
.
Aclamaciones
Fondo
public Observable<List<Foo>> search(SearchView searchView) {
return RxSearchView.queryTextChanges(searchView)
.filter(charSequence -> !TextUtils.isEmpty(charSequence))
.throttleLast(100, TimeUnit.MILLISECONDS)
.debounce(200, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.flatMap(this::performSearch) //Search the DB
.onErrorResumeNext(this::doSomething);
}
Estoy tratando de probar el método anterior utilizando el corredor Mocktio
y Mocktio
.
@Test
public void testSearchCallsDataManager_WhenCalled() {
String input = "abc";
when(mockSearchView.getQuery()).thenReturn(input);
searchRequestManager.search(mockSearchView).subscribe(testSubscriber); //Using standard TestSubscriber
testSubscriber.assertNoErrors();
testSubscriber.assertNotCompleted();
verify(mockDataManager).getFoos(input);
}
El problema
He intentado usar un mockSearchView
y un mockSearchView
real.
mockSearchView = mock(SearchView.class);
searchView = new SearchView(InstrumentationRegistry.getContext(), null);
searchView = new SearchView(InstrumentationRegistry.getTargetContext(), null);
Los objetos reales producen diferentes excepciones cuando se ejecuta la prueba, durante su instanciación. El objeto simulado parece no tener efecto durante la ejecución.
Actualizar
Para mayor claridad: idealmente sería genial si pudiera burlarme de SearchView ya que quiero probar lo que sucede DESPUÉS de que se emita algo y que se llame al método performSearch con las entradas correctas.