2013-05-01 5 views
6

Que puis-je faire pour obtenir une couverture de test sur ContentProvider d'ActiveAndroid dans Robolectric? Ce test simple échoue.Test d'ActiveAndroid avec Robolectric

Le modèle:

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

Le test:

@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 trace de pile résultante:

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) 

Le contexte d'application devrait être ok. Par défaut, Robolectric crée l'application qui apparaît dans le manifeste, qui est dans ce cas com.activeandroid.Application. Donc, je suis étonné de savoir pourquoi le tableauInfo dans Cache n'est pas initialisé. L'exécution normale d'application fonctionne bien.

+0

Quel IDE utilisez-vous? Il y a un bug ouvert sur une solution de contournement pour eclipse, mais pas intellij. https://github.com/pardom/ActiveAndroid/issues/63 – Joe

+0

Cela fonctionne avec Eclipse. Je veux 'tester mvn'. –

+1

Oui, le problème est le même car maven crée un dossier autre que celui attendu par ActiveAndroid. Il ne devrait pas être trop difficile de changer ActiveAndroid pour vous permettre d'enregistrer vos modèles au lieu de les trouver automatiquement. – Joe

Répondre

4

Pour analyser automatiquement les modèles ActiveAndroid automatiquement lors des tests unitaires Maven, il suffit de passer à ModelInfo.scanForModel.

Dans ce procédé, il existe un "Robolectric fallback" qui détecte et balaie les chemins contenant "bin". Cela gère les classes Model dans les projets Eclipse. Maven compile en cible/classes.

Une vérification supplémentaire pour "classes" dans les chemins d'analyse dans ModelInfo fait l'affaire. Ajout d'une demande d'extraction ActiveAndroid pour cela bientôt.

Questions connexes