Robolectric stratejileri

Robolectric, Google tarafından yönetilen açık kaynak bir çerçevedir. Bir emülatörün ek yükünü ve kararsızlığını yaşamadan, JVM içinde simüle edilmiş bir Android ortamında test çalıştırmanıza olanak tanır. Lollipop'tan (API düzeyi 21) beri Android'in tüm sürümlerini destekler.

Birçok büyük proje, testlerinin hızını ve güvenilirliğini artırmak ve gerçek cihazlarda veya emülatörlerde test çalıştırmakla ilişkili maliyetleri azaltmak için Robolectric'i kullanır. Buna, Robolectric'e büyük ölçüde dayanan çoğu Google uygulaması dahildir.

Robolectric, tüm özellikleri ve API'leri desteklemediği için emülatörlerin tam bir yerine geçmez. Örneğin, Robolectric'te emülatör gibi bir ekran yoktur ve bazı API'ler yalnızca kısmen desteklenir. Ancak birim testlerini ve çoğu kullanıcı arayüzü testini güvenilir bir şekilde çalıştırmak için Android'in yeterli bölümünü taklit eder.

Test stratejileri

Robolectric ile kullanabileceğiniz iki tür test stratejisi vardır: birim testi ve kullanıcı arayüzü testi.

Birim testi

Robolectric, Android uygulamalarında "birim testini" etkinleştirmenin bir yolu olarak tasarlanmıştır. Örneğin, bir etkinliğin başlatılmasını simüle edebilir ve tüm yaşam döngüsü yöntemlerini çağırarak içindeki mantığı test edebilirsiniz.

Birim testleri için Robolectric'in sahte öğelerini (gölgeler) de kullanabilirsiniz. Örneğin, sınıfınız bir paket kullanıyorsa veya Bluetooth bağlantısı taklit etmeniz gerekiyorsa.

Genel olarak, test edilebilir bir mimari uygularsanız kodunuz Android çerçevesine bağımlı olmadan tek başına test edilebilir olduğundan birim testi için Robolectric'i kullanmanız gerekmez.

Kullanıcı arayüzü testi

Robolectric, Espresso veya Compose testleri gibi kullanıcı arayüzü testleri de çalıştırabilir. Enstrümante edilmiş bir testi testkaynak grubuna taşıyarak ve Robolectric bağımlılıkları ayarlayarak Robolectric'e dönüştürebilirsiniz.

android {
  testOptions {
    unitTests {
      isIncludeAndroidResources = true
    }
  }
}

dependencies {
  testImplementation("junit:junit:4.13.2")
  testImplementation("org.robolectric:robolectric:4.13")
}

test kaynak grubunda bulunan tüm kullanıcı arayüzü testleri Robolectric ile çalıştırılır.

import androidx.test.espresso.Espresso.onView

@RunWith(AndroidJUnit4::class)
class AddContactActivityTest {
    @Test
    fun inputTextShouldBeRetainedAfterActivityRecreation() {
        // GIVEN
        val contactName = "Test User"
        val scenario = ActivityScenario.launchActivity<AddContactActivity>()

        // WHEN
        // Enter contact name
        onView(withId(R.id.contact_name_text))
            .perform(typeText(contactName))
        // Destroy and recreate Activity
        scenario.recreate()

        // THEN
        // Check contact name was preserved.
        onView(withId(R.id.contact_name_text))
            .check(matches(withText(contactName)))
     }
}

Çoğu kullanıcı arayüzü testi, çerçeveyle etkileşime girmez ve bunları Robolectric'te çalıştırabilirsiniz. Robolectric'te davranış testleri çalıştırabilirsiniz. Bunun için gereken doğruluk fazlasıyla yeterlidir. Örneğin, bir Oluşturma testi, bir düğme tıklandıktan sonra kullanıcı arayüzünün değiştiğini doğrular.

Robolectric ile ekran görüntüsü testleri gibi başka kullanıcı arayüzü testleri de çalıştırabilirsiniz. Ancak farklı cihazlar ekranları biraz farklı şekilde oluşturduklarından doğruluk oranı daha düşüktür.

Robolectric'in uygulamasının her kullanım alanı için yeterli olup olmadığına karar vermeniz gerekir. Bununla birlikte, aşağıdaki önerileri göz önünde bulundurabilirsiniz:

  • Bileşen, özellik veya uygulama testleri için izole kullanıcı arayüzü davranışı testleri için Robolectric'i kullanın. Genel olarak bu testler kullanıcı arayüzlerinin durum yönetimini ve davranışını kontrol eder ve harici bağımlılıklarla etkileşime girmez.
  • Piksel doğruluğu kritik olmadığında ekran görüntüsü almak için Robolectric'i kullanın. Örneğin, bir bileşenin farklı yazı tipi boyutlarına veya temalara nasıl tepki verdiğini test etmek için.

Not: Robolectric, ekran görüntülerini yerel olarak alabilir ancak ekran görüntüsü testi yapmak için üçüncü taraf kitaplığına ihtiyacınız vardır.

Robolectric ve cihaz testleri karşılaştırması

Özet olarak, Robolectric çoğu kullanıcı arayüzü testini çalıştırmak için yeterli doğruluk sağlar ancak bazı durumlarda cihaz testleri yine de gereklidir. Örneğin, kenardan kenara veya pencere içinde pencere gibi sistem kullanıcı arayüzüyle ilgili testler veya WebView gibi desteklenmeyen özelliklere ihtiyaç duyulduğunda cihaz testleri gereklidir.