Test amaçlı içerik sağlayıcıları

Verileri depolamak ve almak veya verileri diğer uygulamalar tarafından erişilebilir hale getirmek için bir içerik sağlayıcı kullanıyorsanız beklenmedik şekilde davranmadığından emin olmak için sağlayıcınızı test etmeniz gerekir. Bu derste herkese açık içerik sağlayıcılarının nasıl test edileceği anlatılmaktadır. Ayrıca, kendi uygulamanıza özel kalmasını sağladığınız sağlayıcılar için de geçerlidir.

İçerik sağlayıcılar için entegrasyon testleri oluşturma

İçerik sağlayıcılar gerçek kullanıcı verilerine erişmenize izin verir. Bu nedenle, içerik sağlayıcıyı ayrı bir test ortamında test etmeniz önemlidir. Bu yaklaşım, yalnızca test durumunda açıkça belirtilen veri bağımlılıklarına karşı çalıştırmanızı sağlar. Aynı zamanda, testlerinizin gerçek kullanıcı verilerini değiştirmediği anlamına da gelir. Örneğin, önceki testten arta kalan veriler olduğu için başarısız olan bir test yazmaktan kaçınmalısınız. Benzer şekilde, testiniz bir sağlayıcıdaki gerçek iletişim bilgilerini eklemekten veya silmekten kaçınmalıdır.

İçerik sağlayıcınızı izole bir şekilde test etmek için ProviderTestCase2 sınıfını kullanın. Bu sınıf, gerçek kullanıcı verilerini etkilemeden dosya ve veritabanı bilgilerine erişmek için IsolatedContext ve MockContentResolver gibi Android sahte nesne sınıflarını kullanmanıza olanak tanır.

Entegrasyon testiniz bir JUnit 4 test sınıfı olarak yazılmalıdır. JUnit 4 test sınıfları oluşturma ve JUnit 4 onaylarını kullanma hakkında daha fazla bilgi edinmek için Yerel Birim Test Sınıfı Oluşturma bölümüne bakın.

İçerik sağlayıcınız için bir entegrasyon testi oluşturmak üzere aşağıdaki adımları gerçekleştirmeniz gerekir:

  1. Test sınıfınızı ProviderTestCase2 alt sınıfı olarak oluşturun.
  2. AndroidX Test'in varsayılan test çalıştırıcınız olarak sağladığı AndroidJUnitRunner sınıfını belirtin.
  3. ApplicationProvider sınıfından Context nesnesini ayarlayın. Örnek için aşağıdaki snippet'e bakın.

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'nin işleyiş şekli

ProviderTestCase2 alt sınıfı olan bir sağlayıcıyı test ediyorsunuz. Bu temel sınıf AndroidTestCase kapsamını genişletir. Böylece uygulama izinlerini test etmek için Android'e özel yöntemlerin yanı sıra JUnit test çerçevesini de sağlar. Bu sınıfın en önemli özelliği, yalıtılmış test ortamını oluşturan başlatma işlemidir.

Başlatma

Başlatma, alt sınıfların kendi kurucularını çağırdığı ProviderTestCase2 oluşturucuda yapılır. ProviderTestCase2 oluşturucu, dosya ve veritabanı işlemlerine izin veren ancak Android sistemiyle diğer etkileşimleri saptayan bir IsolatedContext nesnesi oluşturur. Dosya ve veritabanı işlemleri, cihaz veya emülatörde yerel olan ve özel bir ön eke sahip olan bir dizinde gerçekleştirilir.

Oluşturucu daha sonra test için çözümleyici olarak kullanılacak bir MockContentResolver oluşturur.

Son olarak oluşturucu, test edilen sağlayıcının bir örneğini oluşturur. Bu normal bir ContentProvider nesnesidir ancak tüm ortam bilgilerini IsolatedContext'den aldığı için izole test ortamında çalışmakla sınırlıdır. Test durumu sınıfında yapılan tüm testler bu izole nesne üzerinde çalışır.

İçerik sağlayıcılar için entegrasyon testlerini, izlemeli birim testleriyle aynı şekilde çalıştırırsınız.

Neleri test edebilirsiniz?

İçerik sağlayıcıları test etmek için bazı özel yönergeler aşağıda verilmiştir.

  • Çözümleyici yöntemleriyle test etme: ProviderTestCase2 içinde bir sağlayıcı nesnesi örneklendirmeniz mümkün olsa da, her zaman uygun URI'yi kullanarak bir çözümleyici nesnesiyle test etmeniz gerekir. Bu sayede, normal bir uygulamanın kullanacağı etkileşimi gerçekleştirerek sağlayıcıyı test etmiş olursunuz.
  • Bir herkese açık sağlayıcıyı sözleşme olarak test etme: Sağlayıcınızın herkese açık ve diğer uygulamalar tarafından kullanılabilir olmasını istiyorsanız bunu sözleşme olarak test etmeniz gerekir. Aşağıda, bunun nasıl yapılacağına ilişkin bazı örnekler verilmiştir:
    • Sağlayıcınızın herkese açık olarak gösterdiği sabit değerlerle test yapın. Örneğin, sağlayıcının veri tablolarından birindeki sütun adlarını ifade eden sabit değerleri arayın. Bunlar her zaman sağlayıcı tarafından herkese açık olarak tanımlanan sabit değerler olmalıdır.
    • Sağlayıcınızın sunduğu tüm URI'ları test edin. Sağlayıcınız, her biri verilerin farklı bir yönünü ifade eden çeşitli URI'lar sunabilir.
    • Geçersiz URI'leri test edin. Birim testleriniz, sağlayıcıyı kasıtlı olarak geçersiz URI ile çağırmalı ve hata aramalıdır. Geçersiz URI'ler için IllegalArgumentException yönergesi vermek iyi bir sağlayıcı tasarımıdır.
  • Standart sağlayıcı etkileşimlerini test edin: Çoğu sağlayıcı altı erişim yöntemi sunar: query(), insert(), delete(), update(), getType() veonCreate(). Testleriniz bu yöntemlerin tümünün çalıştığını doğrulamalıdır.
  • İş mantığını test etme: İçerik sağlayıcı, iş mantığını uyguluyorsa test etmeniz gerekir. İş mantığına geçersiz değerlerin, finansal veya aritmetik hesaplamaların işlenmesi, yinelemelerin ortadan kaldırılması veya birleştirilmesi yer alır.