2013-05-01 15 views
6

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.

+0

Jakiego IDE używasz? Istnieje otwarty błąd dotyczący obejścia problemu, ale nie intelli. https://github.com/pardom/ActiveAndroid/issues/63 – Joe

+0

Działa z Eclipse. Chcę "przetestować mvn". –

+1

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

Odpowiedz

4

Automatyczne skanowanie modeli ActiveAndroid automatycznie podczas testów jednostkowych wymaga prostej zmiany na ModelInfo.scanForModel.

W tej metodzie znajduje się "powtórkę Robolectric", która wykrywa i skanuje ścieżki zawierające "bin". Obsługuje klasy modeli w projektach Eclipse.

Maven kompiluje do celu/klas. Dodatkowa kontrola "klas" w ścieżkach skanowania w ModelInfo rozwiązuje problem.

Dodanie żądania pullAndroid do tego wkrótce.