Espresso-Intents, Espresso'nun bir uzantısıdır. Espresso, doğrulama ve tarafından gönderilen amaçların saptırılması olup olmadığını kontrol edin. Bu tıpkı Mockito'ya aittir, ancak Android Intent'ler içindir.
Uygulamanız, işlevler için başka uygulamalara veya platforma yetki veriyorsa aşağıdakileri kullanabilirsiniz: Kendi uygulamanızın mantığına odaklanırken diğer uygulamaların da aynı şekilde Aksi takdirde platform düzgün çalışacaktır. Espresso-Intent'ler sayesinde, ve yanıtınızı doğrulamanın yanı sıra yanıt vermektir.
Projenize Espresso-Intent'leri dahil edin
Uygulamanızın app/build.gradle
dosyasına aşağıdaki satırı ekleyin
dependencies
:
Eski
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.6.1'
Kotlin
androidTestImplementation('androidx.test.espresso:espresso-intents:3.6.1')
Espresso-Intents yalnızca Espresso 2.1+ ve 0.3+ Android test kitaplıkları, dolayısıyla şu satırları da güncellediğinizden emin olun:
Eski
androidTestImplementation 'androidx.test:runner:1.6.1' androidTestImplementation 'androidx.test:rules:1.6.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
Kotlin
androidTestImplementation('androidx.test:runner:1.6.1') androidTestImplementation('androidx.test:rules:1.6.1') androidTestImplementation('androidx.test.espresso:espresso-core:3.6.1')
Test kuralları yazma
Espresso-Intents testi yazmadan önce IntentsTestRule
ayarlayın. Bu bir
ActivityTestRule
sınıfının bir uzantısıdır ve kullanımını kolaylaştırır.
İşlevsel kullanıcı arayüzü testlerinde Espresso-Intents API'ler. IntentsTestRule
ilk kullanıma hazırlanır
Her testten önce @Test
ve sürümler ile açıklama eklenen Espresso-Intent'ler
Her test çalıştırmasından sonra Espresso-Intent'ler.
Aşağıdaki kod snippet'i bir IntentsTestRule
örneğidir:
Kotlin
@get:Rule val intentsTestRule = IntentsTestRule(MyActivity::class.java)
Java
@Rule public IntentsTestRule<MyActivity> intentsTestRule = new IntentsTestRule<>(MyActivity.class);
Eşleşme
Espresso-Intents, giden isteklerinize bağlı olarak Hamcrest Eşleştiriciler kullanılarak tanımlanan belirli eşleşme ölçütleri. Hamcrest şunları yapmanıza olanak tanır:
- Mevcut bir amaç eşleştiriciyi kullanın: Neredeyse her zaman olması gereken en kolay seçenektir tercih edilir.
- Kendi amaç eşleştiricinizi uygulayın: En esnek seçenektir. Daha fazla ayrıntıyı aşağıda bulabilirsiniz: "Özel eşleştiriciler yazma" başlıklı bölümde şunun içinde yer alır: Hamcrest eğitimi.
Espresso-Intents, intended()
ve amaç doğrulama için intending()
saptırma gibi teknikler yer alır. Her ikisi de Hamcrest Matcher<Intent>
nesnesini
bağımsız değişkeninin önüne geçer.
Aşağıdaki kod snippet'i, mevcut niyeti kullanan intent doğrulamasını göstermektedir. tarayıcıyı başlatan giden bir intent'le eşleşen eşleştiriciler:
Kotlin
assertThat(intent).hasAction(Intent.ACTION_VIEW) assertThat(intent).categories().containsExactly(Intent.CATEGORY_BROWSABLE) assertThat(intent).hasData(Uri.parse("www.google.com")) assertThat(intent).extras().containsKey("key1") assertThat(intent).extras().string("key1").isEqualTo("value1") assertThat(intent).extras().containsKey("key2") assertThat(intent).extras().string("key2").isEqualTo("value2")
Java
assertThat(intent).hasAction(Intent.ACTION_VIEW); assertThat(intent).categories().containsExactly(Intent.CATEGORY_BROWSABLE); assertThat(intent).hasData(Uri.parse("www.google.com")); assertThat(intent).extras().containsKey("key1"); assertThat(intent).extras().string("key1").isEqualTo("value1"); assertThat(intent).extras().containsKey("key2"); assertThat(intent).extras().string("key2").isEqualTo("value2");
Amaçları doğrulayın
Espresso-Intents, başlangıçtan itibaren faaliyet başlatmaya çalışan
olup olmadığını kontrol edin. Şuna benzer bir intended()
yöntemi kullanılır:
Mockito.verify()
ile belirli bir amacın görüldüğünü doğrulayabilirsiniz. Ancak,
Espresso-Intents, açıkça yapılandırmadığınız sürece niyetlere yanıtları reddetmez
anlamaktır.
Aşağıdaki kod snippet'i, doğrulama yapan ancak hata vermeyen bir örnek testtir harici bir "telefon" başlatan giden intent, yanıt verme etkinlik:
Kotlin
@Test fun validateIntentSentToPackage() { // User action that results in an external "phone" activity being launched. user.clickOnView(system.getView(R.id.callButton)) // Using a canned RecordedIntentMatcher to validate that an intent resolving // to the "phone" activity has been sent. intended(toPackage("com.android.phone")) }
Java
@Test public void validateIntentSentToPackage() { // User action that results in an external "phone" activity being launched. user.clickOnView(system.getView(R.id.callButton)); // Using a canned RecordedIntentMatcher to validate that an intent resolving // to the "phone" activity has been sent. intended(toPackage("com.android.phone")); }
Stublaj
Mockito.when()
işlevine benzer intending()
yöntemini kullanarak şunları yapabilirsiniz:
ile başlayan aktiviteler için saplama yanıtı
startActivityForResult()
. Bu özellikle harici etkinlikler için yararlıdır
Çünkü harici bir etkinliğin kullanıcı arayüzünü manipüle edemez veya
test edilen etkinliğe döndürülen ActivityResult
değerini kontrol eder.
Aşağıdaki kod snippet'leri bir örnek uygulamaktadır.
activityResult_DisplaysContactsPhoneNumber()
testi. Bu test,
Kullanıcı bir "kişiyi" başlatır iletişim bilgileri, telefon numarası
numara gösterilir:
Belirli bir etkinlik başlatıldığında döndürülecek sonucu oluşturun. İlgili içeriği oluşturmak için kullanılan örnek test, "kişilere" gönderilen tüm Intent'leri yakalar ve görsellerini geçerli bir
ActivityResult
içeren yanıtlar (sonuç kodunu kullanarak)RESULT_OK
Kotlin
val resultData = Intent() val phoneNumber = "123-345-6789" resultData.putExtra("phone", phoneNumber) val result = Instrumentation.ActivityResult(Activity.RESULT_OK, resultData)
Java
Intent resultData = new Intent(); String phoneNumber = "123-345-6789"; resultData.putExtra("phone", phoneNumber); ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData);
Espresso'dan herkese yanıt olarak saplama sonuç nesnesini sağlamasını söyle "kişilerin" çağrıları amaç:
Kotlin
intending(toPackage("com.android.contacts")).respondWith(result)
Java
intending(toPackage("com.android.contacts")).respondWith(result);
Etkinliği başlatmak için kullanılan işlemin beklenen sonucu verdiğini doğrulama saplama sonucu. Bu durumda, örnek testte telefon numarasının "123-345-6789" döndürülür ve "kişi etkinliği"ni seçtiğinizde başlatıldı:
Kotlin
onView(withId(R.id.pickButton)).perform(click()) onView(withId(R.id.phoneNumber)).check(matches(withText(phoneNumber)))
Java
onView(withId(R.id.pickButton)).perform(click()); onView(withId(R.id.phoneNumber)).check(matches(withText(phoneNumber)));
activityResult_DisplaysContactsPhoneNumber()
testinin tamamı aşağıda verilmiştir:
Kotlin
@Test fun activityResult_DisplaysContactsPhoneNumber() { // Build the result to return when the activity is launched. val resultData = Intent() val phoneNumber = "123-345-6789" resultData.putExtra("phone", phoneNumber) val result = Instrumentation.ActivityResult(Activity.RESULT_OK, resultData) // Set up result stubbing when an intent sent to "contacts" is seen. intending(toPackage("com.android.contacts")).respondWith(result) // User action that results in "contacts" activity being launched. // Launching activity expects phoneNumber to be returned and displayed. onView(withId(R.id.pickButton)).perform(click()) // Assert that the data we set up above is shown. onView(withId(R.id.phoneNumber)).check(matches(withText(phoneNumber))) }
Java
@Test public void activityResult_DisplaysContactsPhoneNumber() { // Build the result to return when the activity is launched. Intent resultData = new Intent(); String phoneNumber = "123-345-6789"; resultData.putExtra("phone", phoneNumber); ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData); // Set up result stubbing when an intent sent to "contacts" is seen. intending(toPackage("com.android.contacts")).respondWith(result); // User action that results in "contacts" activity being launched. // Launching activity expects phoneNumber to be returned and displayed. onView(withId(R.id.pickButton)).perform(click()); // Assert that the data we set up above is shown. onView(withId(R.id.phoneNumber)).check(matches(withText(phoneNumber))); }
Ek kaynaklar
Android testlerinde Espresso-Intents'i kullanma hakkında daha fazla bilgi için şu adrese bakın: inceleyebilirsiniz.
Örnekler
- IntentsBasicSample:
intended()
veintending()
temel kullanımı. - IntentsAdvancedSample: Kamerayı kullanarak bit eşlem getiren bir kullanıcıyı simüle eder.