2012-07-24 23 views
8

He escrito algunas pruebas con robolectric y ahora quiero hacer algunas clases de prueba real.Robolectric (android): ¿Pruebas de eventos?

Uno que noto es que no puedo probar los eventos como onCreate, etc. onLocationChanged

Cuál es la práctica estándar para las pruebas de los acontecimientos ...

¿Debo extraer la eso de código dentro de la eventos y colocarlos en un método, el evento llamaría al método y también robolectro podría llamar al método, por supuesto, el método tendría que ser público, ¿no?

Además, si deseo probar algo dentro de mi método que normalmente es una variable privada, entonces tendría que agregar un getter público, ¿no? entonces puedo verificar esto desde el Robolectric?

¿Existe alguna forma mejor de exponer los datos a robolectric?

Gracias de antemano.

+0

¿Ha resuelto esto? Si es así, elija una respuesta. –

Respuesta

7

Al probar onCreate, obtengo robolectric para llamar a Crear y luego probar que la actividad está en el estado correcto después de onCreate. He aquí un ejemplo:

@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); 
    } 
} 

métodos privados de análisis por lo general indica que su diseño podría ser mejorado y no es un problema específico Robolectric.

Ver esta pregunta para mucha discusión: How do I test a class that has private methods, fields or inner classes?

6

A partir de v2 de Robolectric, esta no es la forma correcta de iniciar actividades ahora:

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

Ahora la forma correcta es utilizar este :

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

Esto le dará una instancia de la actividad después de llamar a onCreate.
Si desea probar onStart, onResume, onPause, etc., es de la misma manera, solo hay más métodos.

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

(añadir o eliminar los métodos en línea de código anterior para probar el ejemplo exacto de la actividad que desea)

Sólo quería aclarar la realidad nueva característica interesante de Robolectric.

Cuestiones relacionadas