android rx-java android-appcompat searchview rx-android

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.