2016-06-09 54 views
18

Questa è la prima volta che devo scrivere casi di test unità in Android.Casi test unità con JUnit + (Robolectric o Mockito o entrambi in Android)

Quindi ho cercato un sacco di cose.

  1. Robolectric framewordk - Funziona su JVM
  2. Mockito Framwork - oggetti Mocking

Così ho qualche dubbio in Robolectric & Mokito.

  1. Devo utilizzare Robolectric solo con JUnit nell'app per Android?
  2. Devo utilizzare Mockito solo con JUnit nell'app per Android?
  3. Devo andare con entrambe le strutture?
  4. Qual è la differenza tra Mockito & Robolectric?

Ho una ricerca per la differenza tra Mokito & Robolectric ma non ottenere alcuna risposta adeguata per questo.

Si prega di suggerire.

risposta

26

Hanno usi leggermente diversi e io tendo ad usare entrambi nei miei progetti.

Mockito

viene usato per fare mock di tuoi classi.

Quando si verifica un particolare corso, si prende in giro tutte le sue dipendenze con Mockito.

Ove possibile, la maggior parte dei test dovrebbe utilizzare il mockito. Per rendere possibile tutto questo, molte persone suddividono il loro codice in MVP, ecc. Dove la logica aziendale è separata dalla logica della vista. In questo modo la tua logica di business (Presenter) non ha conoscenze (o dipendenze) nella libreria Android e non ha bisogno di prenderne in giro.

Robolectric

è una libreria che contiene molti mock di Android classi.

Il test runner Robolectric inietta questi "oggetti ombra" al posto delle effettive classi Android quando vengono eseguiti i test. Questo è ciò che consente di eseguire i test sulla JVM senza avviare un'istanza di Android.

Quando si utilizza MVP, il livello View tende ad essere implementato dall'attività/frammento e questo è il punto in cui è possibile utilizzare Robolectric per deriderli.

Note

Usa Robolectric solo dove necessario. In pratica reimplementa parti del framework Android ma non sempre nello stesso identico modo.

Potrebbe anche essere necessario un'altra libreria come PowerMock. Ciò consente di prendere in giro classi statiche come Math o può essere utilizzato per simulare classi statiche di Android come TextUtils.

Entrambi sono utilizzati con JUnit

+0

Ho Activity & Fragment così che userò robolectric e per le mie classi di modelli che sono legate ai servizi web userò mockito. Destra? –

+0

Beh, potrebbe non essere così chiaro ma sì, questa è l'idea generale. – Jahnold

+0

Dai un'occhiata ai test per questa app di esempio che potrebbe darti qualche idea: https://github.com/emmaguy/rxjava-mvp-giphy – Jahnold

9

Mockito da solo può coprire la maggior parte dei casi.

Tuttavia, Robolectric può anche fornire operazioni limitati sulla componente Android come attività o frammento in Unit Test (non prova strumentazione, che non ha dipendenze da Android SDK), che non richiede alcun emulatore o dispositivi ed è considerevolmente più veloce dei test di strumentazione.

Il mio suggerimento: utilizzare Mockito per unit test ed Espresso per test UI poiché si tratta di framework di test semi-ufficiali per Android.

Aggiungi Robolectric nel tuo Test unità se ci sono alcune dipendenze su Android SDK.

+0

devo attività e frammenti e così come i servizi web. devo fare solo test unitari non strumentali. Quindi capisco robolectric ma non ho troppa idea di dove userò robolectric o dove mockito. o mockito sarà utilizzato solo per le classi modello? –

+0

Aggiungendo a questo e al tuo commento, se il tuo livello di business logic è puramente indipendente da Android Framework, dovresti usare JUnit con Mockito, solo se il tuo livello di business logic ha dipendenze da Framework Android, allora devi usare Roboelectric. – Talha