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.
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
Es funktioniert mit Eclipse. Ich möchte 'mvn test'. –
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