2011-04-29 5 views
7

SqlLite 데이터베이스에서 2 개의 테이블에 대한 액세스를 래핑하는 컨텐츠 공급자를 작성했습니다. 지금은 몇 가지 테스트 사례를 작성하고 싶지만 결코 해보지 않았습니다. 개발자 가이드 섹션을 읽은 후에는 테스트를 거치지는 못했다고합니다.Android에서 사용자 정의 ContentProvider 테스트

아래 코드는 지금까지입니다. 이것은 내 프로젝트에 해당하는 테스트 프로젝트의 유일한 클래스입니다. 이클립스에서 그것을 실행하면 에뮬레이터가 제대로 시작하는 패키지가 설치 얻을하지만 테스트를 실행하지 않습니다

테스트 실행 실패 : 테스트가 완료되지 실행합니다. (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의 중단 점이 트리거되지 않습니다. ?!

그물에 대한 많은 정보도 찾지 못했습니다. 아무도 내가 테스트를 설치하는 방법에 대한 이해를 얻을 수 있었습니까 (기본적으로 테스트 데이터베이스 파일을 작성하고, 일부 데이터로 채우고, 쿼리하십시오 ...)?

답변

7

이 그것을 가지고 :

이 좋은 예입니다. 실수는 테스트 클래스에 대한 기본 생성자를 제공하지 않는다는 것이 었습니다.

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

당신이 완전히 아니라 문서를 읽을 수없는 경우

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

오전 2시가, 오후 내가에 NotePadProviderTest.java을 발견 :)

2

setUp()tearDown() 데이터베이스를 만들고 삭제하는 방법을 구현해야합니다. http://www.google.com/codesearch/p?hl=en#IrmxZtZAa8k/tests/src/com/android/providers/calendar/CalendarProvider2Test.java 확인

+0

ArticleProviderTest 클래스의 setUp 메소드는 생성자조차 호출되지 않습니다. –

+0

질문을 편집하고 매니페스트도 추가했습니다. Provider 테스트 클래스 이외에 다른 설정을해야합니까? 어떤 활동도? –

+4

위의 CalendarProvider2Test.java 링크가 끊어졌습니다. 이 하나가 작동하는 것 : https://android.googlesource.com/platform/packages/providers/CalendarProvider/+/refs/heads/jb-dev/tests/src/com/android/providers/calendar/CalendarProvider2Test.java – treejanitor

3

더 나은 시간입니다 지금 : 내가 잘못 생성자를 무시했다 SDK가 제공하는 메모 패드 프로젝트의 시작이 좋습니다.

관련 문제