Prueba de RxBinding RxSearchView

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 de 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 verdadero.

 mockSearchView = mock(SearchView.class); searchView = new SearchView(InstrumentationRegistry.getContext(), null); searchView = new SearchView(InstrumentationRegistry.getTargetContext(), null); 

Los objetos reales resultan en diferentes excepciones cuando se ejecuta la prueba, durante su instanciación. El objeto simulador parece no tener ningún efecto durante la ejecución.

Actualizar

Para mayor claridad: Idealmente sería estupendo si pudiera burlar el SearchView como quiero probar lo que sucede DESPUÉS de que algo se emita y que el método performSearch se llame con las entradas correctas.

Para probar RxBindings simplemente utilicé Espresso y establecí a debounce a 0 (debounce time como public static, y en espresso setUp() lo establecí hasta 0). Entonces solo

 onView(withId(yourId)).perform(ViewActions.replaceText(to something)) 

Y acaba de verificar su Mockito o lo que sea similar con throttleLast() operador throttleLast() .

Aclamaciones

  • Cómo crear un objeto retrofit.Response durante las pruebas de unidad con Retrofit 2
  • Schedulers.immediate () no funciona con las pruebas de gradle de la línea de comandos
  • RxJava + Retrofit + sondeo
  • Compruebe que el método se llama en onNext del suscriptor de RxJava
  • Utilizando RxJava para buscar objetos, transforma una lista contenedora y usa la lista
  • Suscribir 2 diferentes Observable y onNext ambos?
  • Android Rxjava suscribirse a un cambio de variable
  • Utilice RxJava y Retrofit para iterar a través de la lista y aumentar los resultados basados ​​en subconsultas
  • RxJava como autobús de eventos?
  • RXJava - hacer un observable pausable (con buffer y ventana, por ejemplo)
  • Cómo poner en cola las llamadas de la API cuando no está conectado mientras usa Retrofit
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.