Co mogę zrobić, aby uzyskać pokrycie testowe dla ContentAndroid ContentProvider w Robolectric? Ten prosty test kończy się niepowodzeniem.Testowanie ActiveAndroid z Robolectric
Model:
@Table(name = "Things")
public class Thing extends Model {
public Thing() {
super();
}
}
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));
}
}
Otrzymany ślad stosu:
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)
kontekstu aplikacji powinny być OK. Domyślnie Robolectric tworzy aplikację, która pojawia się w manifeście, którym w tym przypadku jest com.activeandroid.Application.
Tak, jestem zdziwiony, dlaczego tableInfo w pamięci podręcznej nie została zainicjowana. Zwykłe wykonywanie aplikacji działa dobrze.
Jakiego IDE używasz? Istnieje otwarty błąd dotyczący obejścia problemu, ale nie intelli. https://github.com/pardom/ActiveAndroid/issues/63 – Joe
Działa z Eclipse. Chcę "przetestować mvn". –
Tak, to będzie ten sam problem, ponieważ maven buduje folder inny niż oczekiwany przez ActiveAndroid. Zmiana ActiveAndroida nie powinna być zbyt trudna, aby można było zarejestrować swoje Modele zamiast automatycznie je wyszukiwać. – Joe