콘텐츠 제공자 테스트

데이터를 저장 및 검색하거나 다른 앱에서 데이터에 액세스할 수 있도록 콘텐츠 제공업체를 구현하는 경우 제공업체를 테스트하여 예상치 못한 방식으로 작동하지 않는지 확인해야 합니다. 이 과정에서는 공개 콘텐츠 제공업체를 테스트하는 방법을 설명하며 이 과정은 자체 앱에 비공개로 유지하는 제공업체에도 적용됩니다.

콘텐츠 제공업체의 통합 테스트 만들기

콘텐츠 제공업체를 통해 실제 사용자 데이터에 액세스할 수 있으므로 격리된 테스트 환경에서 콘텐츠 제공업체를 테스트하는 것이 중요합니다. 이 접근 방식을 사용하면 테스트 사례에 명시적으로 설정된 데이터 종속 항목에 대해서만 실행할 수 있습니다. 또한 테스트가 실제 사용자 데이터를 수정하지 않음을 의미합니다. 예를 들어 이전 테스트에서 남은 데이터가 있으므로 실패한 테스트를 작성하지 않아야 합니다. 마찬가지로 테스트는 제공업체의 실제 연락처 정보를 추가하거나 삭제하지 않아야 합니다.

콘텐츠 제공자를 개별적으로 테스트하려면 ProviderTestCase2 클래스를 사용합니다. 이 클래스를 사용하면 IsolatedContextMockContentResolver와 같은 Android 모의 객체 클래스를 사용하여 실제 사용자 데이터에 영향을 주지 않고 파일 및 데이터베이스 정보에 액세스할 수 있습니다.

통합 테스트는 JUnit 4 테스트 클래스로 작성해야 합니다. JUnit 4 테스트 클래스를 만드는 방법과 JUnit 4 어설션을 사용하는 방법을 자세히 알아보려면 로컬 단위 테스트 클래스 만들기를 참고하세요.

콘텐츠 제공업체의 통합 테스트를 만들려면 다음 단계를 실행해야 합니다.

  1. 테스트 클래스를 ProviderTestCase2의 서브클래스로 만듭니다.
  2. AndroidX 테스트에서 제공하는 AndroidJUnitRunner 클래스를 기본 테스트 실행기로 지정합니다.
  3. ApplicationProvider 클래스에서 Context 객체를 설정합니다. 예는 아래 스니펫을 참고하세요.

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


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

ProviderTestCase2 작동 방식

ProviderTestCase2의 서브클래스를 사용하여 제공업체를 테스트합니다. 이 기본 클래스는 AndroidTestCase를 확장하므로 JUnit 테스트 프레임워크와 애플리케이션 권한 테스트를 위한 Android 관련 메서드를 제공합니다. 이 클래스의 가장 중요한 기능은 격리된 테스트 환경을 만드는 초기화입니다.

초기화

초기화는 서브클래스가 자체 생성자에서 호출하는 ProviderTestCase2의 생성자에서 실행됩니다. ProviderTestCase2 생성자는 파일 및 데이터베이스 작업을 허용하지만 Android 시스템과의 다른 상호작용을 스터브하는 IsolatedContext 객체를 만듭니다. 파일 및 데이터베이스 작업 자체는 기기나 에뮬레이터에 로컬이며 특별한 접두사가 있는 디렉터리에서 실행됩니다.

그런 다음 생성자가 테스트의 리졸버로 사용할 MockContentResolver를 만듭니다.

마지막으로 생성자는 테스트 중인 제공업체의 인스턴스를 만듭니다. 이는 일반적인 ContentProvider 객체이지만 IsolatedContext에서 모든 환경 정보를 가져오기 때문에 격리된 테스트 환경에서의 작동으로 제한됩니다. 테스트 사례 클래스에서 실행된 모든 테스트는 이 격리된 객체를 대상으로 실행됩니다.

계측 단위 테스트와 동일한 방식으로 콘텐츠 제공업체의 통합 테스트를 실행합니다.

테스트 대상

다음은 콘텐츠 제공업체를 테스트하기 위한 구체적인 가이드라인입니다.

  • 리졸버 메서드로 테스트: ProviderTestCase2에서 제공자 객체를 인스턴스화할 수 있지만 항상 적절한 URI를 사용하여 리졸버 객체로 테스트해야 합니다. 이렇게 하면 일반 애플리케이션에서 사용하는 것과 동일한 상호작용을 실행하여 제공업체를 테스트할 수 있습니다.
  • 공개 제공업체를 계약으로 테스트: 제공업체를 공개하고 다른 애플리케이션에서 사용할 수 있도록 하려면 제공업체를 계약으로 테스트해야 합니다. 이 작업을 실행하는 방법의 예는 다음과 같습니다.
    • 제공업체가 공개적으로 노출하는 상수로 테스트합니다. 예를 들어 제공자의 데이터 테이블 중 하나에 있는 열 이름을 참조하는 상수를 찾습니다. 이러한 상수는 항상 제공업체가 공개적으로 정의한 상수여야 합니다.
    • 제공업체가 제공하는 모든 URI 테스트: 제공업체는 여러 URI를 제공할 수 있으며, 각 URI는 데이터의 다른 측면을 나타냅니다.
    • 잘못된 URI를 테스트합니다. 단위 테스트는 잘못된 URI를 사용하여 의도적으로 제공자를 호출하고 오류를 찾아야 합니다. 좋은 제공업체 디자인은 잘못된 URI에 IllegalArgumentException을 발생시키는 것입니다.
  • 표준 제공자 상호작용 테스트: 대부분의 제공업체는 query(), insert(), delete(), update(), getType(), onCreate()의 6가지 액세스 방법을 제공합니다. 테스트에서 이러한 메서드가 모두 작동하는지 확인해야 합니다.
  • 비즈니스 로직 테스트: 콘텐츠 제공자가 비즈니스 로직을 구현하는 경우 테스트해야 합니다. 비즈니스 로직에는 잘못된 값 처리, 재무 또는 산술 계산, 제거 또는 중복 항목 결합이 포함됩니다.