Тестирование пользовательского ContentProvider в Android - PullRequest
7 голосов
/ 30 апреля 2011

Я написал своему поставщику контента, который должен обернуть доступ к 2 таблицам в базе данных SqlLite. Теперь я хотел бы написать несколько тестов для этого, но я никогда не делал этого. Прочитав раздел руководства разработчика, я должен сказать, что мне не удалось ничего проверить.

Ниже приведен мой код. Это единственный класс в тестовом проекте, который соответствует моему основному проекту. Когда я выполняю его в Eclipse, эмулятор запускается правильно, пакеты устанавливаются, но тест не запускается:

Тестовый прогон не выполнен: Тестовый прогон не завершен. Ожидается 1 тест, получено 0

Вот тестовый класс:

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

И файл манифеста, если он поможет:

<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>

Когда я запускаю в конфигурации отладки, точки останова в конструкторе и в setUp не запускаются. ?!

Я также не нашел много информации в сети. Может ли кто-нибудь помочь мне понять, как следует настраивать тестирование (в основном создать тестовый файл базы данных, заполнить его некоторыми данными, запросить его, ...)?

Ответы [ 3 ]

7 голосов
/ 30 апреля 2011

Хорошо, понял.Ошибка заключалась в том, что я не предоставлял конструктор по умолчанию для тестового класса.Я переопределил неправильный конструктор:

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

сейчас

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

2 утра - это время, когда вы не можете читать документы полностью хорошо, лучше полдень

3 голосов
/ 06 марта 2013

Я нашел NotePadProviderTest.java в примере проекта NotePad, предоставленном SDK, как хорошее начало.

2 голосов
/ 30 апреля 2011

Вы должны реализовать setUp() и tearDown() методы, в которых вы создаете и удаляете базу данных.

Это отличный пример: http://www.google.com/codesearch/p?hl=en#IrmxZtZAa8k/tests/src/com/android/providers/calendar/CalendarProvider2Test.java

...