2016-03-23 9 views
4

Ich benutze Ottos EventBus in meiner Android App.Wie/Soll ich UnitBus-Ereignisse mit Mockito testen?

In meiner LoginNetworkOperation Klasse, fangen ich verschiedene Arten von Netzwerkverbindungsfehlern und ich posten verschiedene Busereignisse für jedes, und meine LoginPresenter Klasse ist als Listener registriert und bestimmte Methoden aufgerufen werden, wenn diese Ereignisse ausgelöst werden.

Meine Frage ist, wie (und soll ich) ich Einheitstest, ob die LoginNetworkOperation löst dieses Ereignis und LoginPresenter behandelt es mit Mockito?

Ich schaute auf diese Frage: Guava EventBus unit tests, aber es bietet nicht genügend Informationen, vor allem auf der Implementierung.

public class LoginNetworkOperation { 

    public void execute(String username, String password) { 
     try { 
      // retrofit attempt 
     } catch (Exception e) { 
      bus.post(new ExceptionEvent(e)); 
     } 
    } 
} 

public class LoginPresenter { 

    void onExceptionEvent(ExceptionEvent exceptionEvent) { 
     // Do Something with the exception event 
    } 
} 

Auch sollte die die Subject Under Test hier sein und welche die nachgeahmten Objekt sein sollte?

Ich bin mit JUnit + Mockito + Robolectric in Android Studio und mein Test Artefakt ist Komponententests

Antwort

3

Meine Frage ist, wie (und sollte ich) muss ich Unit-Test, ob die LoginNetworkOperation dieses Ereignis wirft und LoginPresenter behandelt es mit Mockito?

Das ist bereits ein Integrationstest: Sie kombinieren einzelne Softwaremodule und verifizieren ihr Verhalten als Gruppe.

In diesem Fall ist das „Subjekt unter Test“ ist die Kombination von LoginNetworkOperation, EventBus und LoginPresenter und die nachgeahmten Objekte sind die Eingänge zu LoginNetworkOperation und was auch immer verarbeitet der Ausgabe von LoginPresenter.


Diese drei Software-Module auch als Einheit getestet werden kann:

  • LoginNetworkOperation.execute: die EventBus verspotten und überprüfen, ob es mit den richtigen ExceptionEvent für verschiedene Eingänge genannt wird.
  • LoginPresenter.onExceptionEvent: Überprüfen Sie das korrekte Verhalten für verschiedene ExceptionEvents.
  • EventBus.post: registrieren Sie eine gespottete ExceptionEvent -Handler, geben Sie eine ExceptionEvent und überprüfen Sie, dass der Handler aufgerufen wird.
+0

so kann ich einen Mock registrieren, um auf Event-Bus-Events zu hören und den EventBus zum Event zu machen, und der Mock soll es bekommen? –

+0

in welchem ​​der Tests, die ich erwähnte, der "EventBus.post" Unit-Test? Wenn ja, ja. – Bewusstsein

+0

vielen Dank :) –