2012-07-24 17 views
8

Ho scritto alcuni test usando robolectric e ora voglio fare delle vere e proprie classi di test.Robolectric (android): test degli eventi?

Uno che noto è che non riesco a testare gli eventi come onCreate, onLocationChanged ecc

Qual è la prassi standard per testare gli eventi ...

Devo estrarre il thats di codice all'interno del eventi e metterli in un metodo, l'evento chiamerebbe il metodo e anche robolectro potrebbe chiamare il metodo, ovviamente il metodo dovrebbe essere pubblico, giusto?

Anche se desidero testare qualcosa nel mio metodo che è normalmente una variabile privata, allora avrei bisogno di aggiungere un getter pubblico, giusto? quindi posso controllare questo da robolectric?

Esiste un modo migliore per esporre i dati a robolectric?

Grazie in anticipo.

+0

Hai risolto questo? In tal caso, si prega di scegliere una risposta. –

risposta

7

Durante il test suCreate, ottengo robolectric per chiamare suCreate e quindi verificare che l'attività sia nello stato corretto dopo onCreate. Ecco un esempio:

@RunWith(RoboTestRunner.class) 
public class DashboardActivityTest { 

    private DashboardActivity activity; 

    @Before 
    public void setUp() throws Exception { 
     activity = new DashboardActivity(); 
    } 

    @After 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void testDashboardHasButtons() { 
     activity.onCreate(null); 
     Button btn1= (Button) activity.findViewById(R.id.btn1); 
     assertNotNull(btn1); 
     Button btn2= (Button) activity.findViewById(R.id.btn2); 
     assertNotNull(btn2); 
    } 
} 

metodi di prova privati ​​di solito indica il vostro disegno potrebbe essere migliorata e non è un problema specifico Robolectric.

Vedere questa domanda per un sacco di discussione: How do I test a class that has private methods, fields or inner classes?

6

partire v2 di Robolectric, questo non è il modo corretto di iniziare le attività ora:

MyActivity testActivity = new MyActivity(); 
testActivity.onCreate(null); 

Ora il modo corretto è quello di utilizzare questo :

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().get(); 

Ciò fornirà un'istanza dell'attività dopo aver chiamato su Crea.
Se si desidera testare su Start, onResume, onPause, ecc, è lo stesso, solo più metodi.

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().start().resume().pause().stop().destroy().get(); 

(aggiungere o rimuovere i metodi in linea di cui sopra di codice per verificare l'istanza esatta della attività che si desidera)

Volevo solo chiarire la realtà nuova caratteristica piacevole di Robolectric.

Problemi correlati