2011-03-31 10 views
6

Esto tiene que ver con el uso del framework Robolectric para probar unidades en android. Obtengo una excepción de puntero nulo en el código que no tiene ningún problema cuando se ejecuta normalmente. Estoy comenzando con el roboeléctrico, por lo que es bastante simple.Android/Robolectric frame work - La actividad instanciada devuelve null en getResource

Aquí está el código de llamada para las pruebas:

@Test 
    public void testInitUtilsInitSequenceNumberIsRandom() { 

    // create an activity for reference 
    InitUtils initUtils = new InitUtils(); 

    // do static initialization to parse questions into memory 
    InitUtils.initialize(initUtils); // <============ the call from roboelectric framework 

    // retreive app state 
    AppState appState = (AppState) initUtils.getApplicationContext(); 

    // fill in later 
    fail("not implemented"); 

} 

Aquí es el método llamado dentro de la cual se estrella InitUtils

/** * Carga el XML en la {} mQuestions @see miembro de la clase variables * */

public static void initializeQuestions(Activity activity, AppState appState)     { 

    /* create XML Parser */ 
    XmlResourceParser questionBatch;  
    /* local question variable */ 
    Question question = null; 

    /* retrieve the XML for parsing */ 
    // =============== This returns null ============================== 
    questionBatch = activity.getResources().getXml(R.xml.questions); 

    /* Parse the XML */ 
    int eventType = -1;  
    /* iterate through XML */ 
    while (eventType != XmlResourceParser.END_DOCUMENT) { 
     if (eventType == XmlResourceParser.START_TAG) { 

     /* Get the questions */ 
     // ================================= NPE exception ====================== 
     String strName = questionBatch.getName(); 
     ...etc 

¿hay algo especial que tengo que hacer para este para recuperar el recurso?

+0

Qué línea fue que se estrella en? – jlindenbaum

+0

@Jack BenNimble ¿qué dice LogCat aquí? – Herry

Respuesta

0

No sé nada acerca de esto de Robolectric, pero getResources() devolver nulo significa que se llama antes de que el framework haya llamado Activity.onCreate(). No sé de dónde sacaste esta actividad, pero si estás realizando pruebas unitarias encima de Instrumentación, debes asegurarte de que tu instrumentación bloquea hasta que el hilo principal haya terminado de ejecutarse, usando algo como:

http://developer.android.com/reference/android/app/Instrumentation.html#waitForIdleSync()

Si está utilizando startActivitySync esto se hará para usted:

http://developer.android.com/reference/android/app/Instrumentation.html#startActivitySync(android.content.Intent)

+0

Robolectric es diferente y debería crear un objeto Shadow Resource, por lo que este estilo de prueba de Android no es la respuesta. – Blundell