2013-05-01 9 views
6

Was kann ich tun, um in Robolectric einen Testbericht über ActiveAndroids ContentProvider zu erhalten? Dieser einfache Test schlägt fehl.Testen von ActiveAndroid mit Robolectric

Das Modell:

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

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

Der resultierende Stack-Trace:

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) 

Der Anwendungskontext in Ordnung sein sollte. Standardmäßig erstellt Robolectric die Anwendung, die im Manifest angezeigt wird, in diesem Fall com.activeandroid.Application.

Also, ich bin verwirrt, warum die TableInfo im Cache nicht initialisiert wird. Die normale Ausführung der Anwendung funktioniert einwandfrei.

+0

Welche IDE verwenden Sie? Es gibt einen offenen Fehler über eine Problemumgehung für Eclipse, aber nicht intellij. https://github.com/pardom/ActiveAndroid/issues/63 – Joe

+0

Es funktioniert mit Eclipse. Ich möchte 'mvn test'. –

+1

Ja, das wird das gleiche Problem haben, weil Maven in einen anderen Ordner als ActiveAndroid erstellt. Es sollte nicht zu schwierig sein, ActiveAndroid zu ändern, damit Sie Ihre Modelle registrieren können, anstatt sie automatisch zu finden. – Joe

Antwort

4

automatisch Um ActiveAndroid Modelle automatisch während Maven Unit-Tests scannen erfordert eine einfache Änderung an ModelInfo.scanForModel.

Bei dieser Methode gibt es einen "Robolectric Fallback", der Pfade erkennt und scannt, die "bin" enthalten. Dies behandelt Modellklassen in Eclipse-Projekten.

Maven kompiliert zu Ziel/Klassen. Eine zusätzliche Überprüfung für "Klassen" in Scanpfaden in ModelInfo macht den Trick.

Hinzufügen einer ActiveAndroid Pull-Anfrage für diese bald.

Verwandte Themen