2011-04-29 18 views
7

Napisałem, że mój dostawca treści powinien zawijać dostęp do 2 tabel w bazie danych SqlLite. Teraz chciałbym napisać kilka przypadków testowych, ale nigdy tego nie robiłem. Po przeczytaniu sekcji na temat przewodnika dla programistów muszę powiedzieć, że nie udało mi się niczego przetestować.Testowanie niestandardowego dostawcy treści w systemie Android

Poniżej znajduje się mój kod do tej pory. Jest to jedyna klasa w projekcie testowym, która odpowiada mojemu głównemu projektowi. Kiedy wykonać go w Eclipse, emulator uruchamia się poprawnie, pakiety zostaną zainstalowane, ale nie uruchomić test run

Niepowodzenie testu: Test prowadzony niekompletne. Oczekiwany 1 testy, otrzymał 0

Oto klasa Test:

public class ArticleProviderTest extends ProviderTestCase2<ArticleProvider> { 

    static final Uri[] validUris = new Uri[] { Articles.CONTENT_URI, 
     Pictures.CONTENT_URI, 
     Pictures.getContentUriForArticleId(1) }; 

    public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
     super(providerClass, providerAuthority); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
    } 

    public void testQuery() { 
     ContentProvider provider = getProvider();  
     for (Uri uri : validUris) { 
      Cursor cursor = provider.query(uri, null, null, null, null); 
      assertNotNull(cursor); 
     }  
    } 
} 

A plik manifestu, czy to pomaga:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="fr.marvinlabs.xxxx" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <instrumentation android:targetPackage="fr.marvinlabs.xxxx" android:name="android.test.InstrumentationTestRunner" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <uses-library android:name="android.test.runner" /> 
    </application> 
</manifest> 

Kiedy uruchomić w konfiguracji debugowania, Punkty przerwania w konstruktorze i w setUp nie są wyzwalane. ?!

Również nie znalazłem zbyt wielu informacji w sieci. Czy ktokolwiek mógłby mi pomóc w zrozumieniu, jak należy przeprowadzić testowanie (w zasadzie utworzyć plik testowej bazy danych, wypełnić go pewnymi danymi, zapytać, ...)?

Odpowiedz

7

Ok, rozumiem. Błąd polegał na tym, że nie zapewniałem domyślnego konstruktora dla klasy testowej. Miałem nadpisane złą konstruktora:

public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
    super(providerClass, providerAuthority); 
} 

jest teraz

public ArticleProviderTest() { 
    super(ArticleProvider.class, "com.blah.azerty"); 
} 

2 nad ranem jest czas, kiedy nie można odczytać docs zupełnie dobrze, po południu jest lepiej :)

2

Powinieneś zaimplementować metody setUp() i tearDown(), w których tworzysz i usuwasz bazę danych.

Jest to świetny przykład: http://www.google.com/codesearch/p?hl=en#IrmxZtZAa8k/tests/src/com/android/providers/calendar/CalendarProvider2Test.java

+0

Metoda setUp klasy ArticleProviderTest nie jest wywoływana, nawet konstruktor. –

+0

Edytowałem pytanie i dodałem również manifest. Czy muszę ustawić coś innego niż klasa testu dostawcy? Każda aktywność również? –

+4

Powyższy odnośnik CalendarProvider2Test.java jest uszkodzony. Ten wydaje się działać: https://android.googlesource.com/platform/packages/providers/CalendarProvider/+/refs/heads/jb-dev/tests/src/com/android/providers/calendar/CalendarProvider2Test.java – treejanitor

3

znalazłem NotePadProviderTest.java w Uwaga: Przykładowy projekt dostarczony przez pakiet SDK jest dobrym początkiem.

Powiązane problemy