2013-05-01 17 views
6

Cosa posso fare per ottenere una copertura di test su ContentProvider di ActiveAndroid in Robolectric? Questo semplice test fallisce.Test di ActiveAndroid con Robolectric

Il modello:

@Table(name = "Things") 
    public class Thing extends Model { 
    public Thing() { 
     super(); 
    } 
} 

La prova:

@RunWith(RobolectricTestRunner.class) 
public class ContentProviderTest { 

    @Test 
    public void itShouldQuery() throws Exception { 
    new Thing().save(); 
    ContentResolver cr = new MainActivity().getContentResolver(); 
    assertNotNull(
     cr.query(Uri.parse("content://org.example/things"), 
        null, null, null, null)); 
    } 
} 

La conseguente analisi dello stack:

java.lang.NullPointerException: null 
    at com.activeandroid.Cache.getTableInfo(Unknown Source) 
    at com.activeandroid.Model.<init>(Unknown Source) 
    at org.example.Thing.<init>(Thing.java:9) 
    at org.example.ProviderTest.itShouldQuery(ProviderTest.java:25) 

Il contesto di applicazione dovrebbe essere ok. Per impostazione predefinita, Robolectric crea l'applicazione che appare nel manifest, che in questo caso è com.activeandroid.Application.

Quindi, sono perplesso sul perché la tabellaInfo in Cache non sia inizializzata. L'esecuzione normale dell'applicazione funziona correttamente.

+0

Quale IDE stai utilizzando? C'è un bug aperto su una soluzione alternativa per eclipse, ma non intellij. https://github.com/pardom/ActiveAndroid/issues/63 – Joe

+0

Funziona con Eclipse. Voglio 'mvn test'. –

+1

Sì, avremo lo stesso problema perché Maven si inserisce in una cartella diversa da quella che ActiveAndroid si aspetta. Non dovrebbe essere troppo difficile cambiare ActiveAndroid per consentire di registrare i Modelli invece di trovarli automaticamente. – Joe

risposta

4

Per acquisire automaticamente Modelli ActiveAndroid automaticamente durante Maven unit test richiede una semplice modifica al ModelInfo.scanForModel.

In questo metodo, c'è un "ripiego Robolectric", che rileva e analizza i percorsi che contengono "bin". Gestisce le classi del modello nei progetti Eclipse.

Maven viene compilato per target/classi. Un ulteriore controllo per "classi" nei percorsi di scansione in ModelInfo fa il trucco.

Aggiunta di una richiesta di pull ActiveAndroid per questo al più presto.

Problemi correlati