Espresso Test Çerçevesi - Eşleştiricileri Görüntüle
Espresso çerçevesi birçok görüntü eşleştirici sağlar. Eşleştiricinin amacı, görünümün Kimlik, Metin ve çocuk görünümünün kullanılabilirliği gibi farklı özelliklerini kullanarak bir görünümü eşleştirmektir. Her eşleştirici, görünümün belirli özellikleriyle eşleşir ve belirli bir görünüm türü için geçerlidir. Örneğin, withId eşleştirici , görünümün Id özelliğiyle eşleşir ve tüm görünüme uygulanır, oysa withText eşleştirici , görünümün Text özelliğiyle eşleşir ve yalnızca TextView için geçerlidir .
Bu bölümde, espresso test çerçevesi tarafından sağlanan farklı eşleştiricileri ve espresso eşleştiricilerin üzerine inşa edildiği Hamcrest kitaplığını öğrenelim .
Hamcrest Kütüphanesi
Hamcrest kütüphanesi, espresso test çerçevesi kapsamında önemli bir kütüphanedir. Hamcrest , eşleştirici nesneler yazmak için bir çerçevedir. Espresso çerçevesi, Hamcrest kitaplığını kapsamlı bir şekilde kullanır ve basit ve genişletilebilir eşleştiriciler sağlamak için gerektiğinde genişletir.
Hamcrest , basit bir assertThat işlevi ve herhangi bir nesneyi savunmak için bir eşleştiriciler koleksiyonu sağlar. assertBunun üç argümanı vardır ve aşağıda gösterildiği gibidir -
Dize (testin açıklaması, isteğe bağlı)
Nesne (gerçek)
Eşleştirici (beklenen)
Bir liste nesnesinin beklenen değere sahip olup olmadığını test etmek için basit bir örnek yazalım.
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@Test
public void list_hasValue() {
ArrayList<String> list = new ArrayList<String>();
list.add("John");
assertThat("Is list has John?", list, hasItem("John"));
}
Burada hasItem , gerçek listenin öğeden biri olarak değer belirtip belirtmediğini kontrol eden bir eşleştirici döndürür.
Hamcrest , birçok yerleşik eşleştiriciye ve ayrıca yeni eşleştiriciler oluşturma seçeneğine sahiptir. Espresso test çerçevesinde yararlı olan bazı önemli yerleşik eşleştiriciler aşağıdaki gibidir:
herhangi bir şey - her zaman eşleştiriciler
Mantıksal tabanlı eşleştiriciler
allOf - herhangi bir sayıda eşleştirmeyi ve kibriti yalnızca tüm eşleştiriciler başarılı olursa kabul edin.
anyOf - herhangi bir eşleştirici başarılı olursa, istediğiniz sayıda eşleştirici ve kibrit kabul edin.
not - bir eşleştiriciyi ve yalnızca eşleştirici başarısız olursa eşleşmeleri kabul edin ve bunun tersi de geçerlidir.
Metin tabanlı eşleştiriciler
equalToIgnoringCase - gerçek girdinin beklenen dizeye eşit olup olmadığını test etmek için kullanılır, büyük / küçük harf yoksayılır.
equalToIgnoringWhiteSpace - büyük / küçük harf ve beyaz boşlukları göz ardı ederek gerçek girdinin belirtilen dizeye eşit olup olmadığını test etmek için kullanılır.
containsString - gerçek girdinin belirtilen dizeyi içerip içermediğini test etmek için kullanılır.
endsWith - gerçek girdinin belirtilen dizeyle başlayıp başlamadığını test etmek için kullanılır.
startsWith - gerçek girdinin belirtilen dizeyle bitip bitmediğini test etmek için kullanılır.
Sayı tabanlı eşleştiriciler
closeTo - gerçek girişin beklenen sayıya yakın olup olmadığını test etmek için kullanılır.
greaterThan - gerçek girişin beklenen sayıdan büyük olup olmadığını test etmek için kullanılır.
greaterThanOrEqualTo - gerçek girişin beklenen sayıdan büyük veya ona eşit olup olmadığını test etmek için kullanılır.
lessThan - gerçek girişin beklenen sayıdan az olup olmadığını test etmek için kullanılır.
lessThanOrEqualTo - gerçek girdinin beklenen sayıdan küçük veya ona eşit olup olmadığını test etmek için kullanılır.
Nesne tabanlı eşleştiriciler
equalTo - gerçek girdinin beklenen nesneye eşit olup olmadığını test etmek için kullanılır
hasToString - gerçek girdinin toString yöntemi olup olmadığını test etmek için kullanılır.
instanceOf - gerçek girdinin beklenen sınıfın örneği olup olmadığını test etmek için kullanılır.
isCompatibleType - gerçek girişin beklenen türle uyumlu olup olmadığını test etmek için kullanılır.
notNullValue - gerçek girişin boş olup olmadığını test etmek için kullanılır.
sameInstance - gerçek girdinin ve beklenenin aynı örnek olup olmadığını test etmek için kullanılır.
hasProperty - gerçek girdinin beklenen özelliğe sahip olup olmadığını test etmek için kullanılır
- Eşitlik için şeker veya kısa yol
Maçlar
Espresso, görünümleri eşleştirmek ve bulmak için onView () yöntemini sağlar. Görünüm eşleştiricilerini kabul eder ve eşleşen görünümle etkileşim kurmak için ViewInteraction nesnesini döndürür. Sık kullanılan görünüm eşleştiriciler listesi aşağıda açıklanmıştır -
withId ()
withId () , int türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün kimliğini belirtir. Görünümün kimliğini kullanarak görünümü eşleştiren bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withId(R.id.testView))
withText ()
withText () , string türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün text özelliğinin değerini belirtir. Görünümün metin değerini kullanarak görünümü eşleştiren bir eşleştirici döndürür. Yalnızca TextView için geçerlidir . Örnek kod aşağıdaki gibidir,
onView(withText("Hello World!"))
withContentDescription ()
withContentDescription () , string türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün içerik açıklaması özelliğinin değerini belirtir. Görünümün açıklamasını kullanarak görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withContentDescription("blah"))
Metnin kendisi yerine metin değerinin kaynak kimliğini de iletebiliriz.
onView(withContentDescription(R.id.res_id_blah))
hasContentDescription ()
hasContentDescription () argümanı içermiyor. Herhangi bir içerik açıklamasına sahip görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), hasContentDescription()))
withTagKey ()
withTagKey () , string türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün etiket anahtarına başvurur . Görünümü etiket anahtarını kullanarak eşleştiren bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withTagKey("blah"))
Etiket adının kendisi yerine etiket adının kaynak kimliğini de iletebiliriz.
onView(withTagKey(R.id.res_id_blah))
withTagValue ()
withTagValue () , Matcher <Object> türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün etiket değerini belirtir. Görünümü etiket değerini kullanarak eşleştiren bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withTagValue(is((Object) "blah")))
Burada ise hamcrest eşleştirici olduğunu.
withClassName ()
withClassName () , Matcher <String> türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün sınıf adı değerini belirtir. Görünümle sınıf adını kullanarak eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withClassName(endsWith("EditText")))
Burada, Hamcrest eşleştiricisidir ve Matcher <String> döndürür.
withHint ()
withHint () , Matcher <String> türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün ipucu değerini belirtir. Görünümün ipucunu kullanarak görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withClassName(endsWith("Enter name")))
withInputType ()
withInputType () , int türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün giriş türünü belirtir. Giriş türünü kullanarak görünümü eşleştiren bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withInputType(TYPE_CLASS_DATETIME))
Burada, TYPE_CLASS_DATETIME , tarih ve saatleri destekleyen düzenleme görünümünü ifade eder.
withResourceName ()
withResourceName () , Matcher <String> türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün sınıf adı değerini belirtir. Görünümün kaynak adını kullanarak görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withResourceName(endsWith("res_name")))
Dize argümanını da kabul eder. Örnek kod aşağıdaki gibidir,
onView(withResourceName("my_res_name"))
withAlpha ()
withAlpha () float türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün alfa değerini belirtir. Görünümün alfa değerini kullanarak görünümü eşleştiren bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withAlpha(0.8))
withEffectiveVisibility ()
withEffectiveVisibility () , ViewMatchers.Visibility türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün etkili görünürlüğünü ifade eder. Görünümün görünürlüğünü kullanarak görünümü eşleştiren bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withEffectiveVisibility(withEffectiveVisibility.INVISIBLE))
withSpinnerText ()
withSpinnerText () , Matcher <String> türünde bir argümanı kabul eder ve argüman, Spinner'ın mevcut seçili görünümün değerini belirtir. Seçilen öğenin toString değerine göre döndürücüyle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(withSpinnerText(endsWith("USA")))
Dizenin dize bağımsız değişkenini veya kaynak kimliğini de kabul eder. Örnek kod aşağıdaki gibidir,
onView(withResourceName("USA"))
onView(withResourceName(R.string.res_usa))
withSubstring ()
) (withSubString benzer withText () o bakış metin değeri test substring yardımcı hariç.
onView(withSubString("Hello"))
hasLinks ()
hasLinks () argümanı içermez ve bağlantıları olan görünümle eşleşen bir eşleştirici döndürür. Yalnızca TextView için geçerlidir. Örnek kod aşağıdaki gibidir,
onView(allOf(withSubString("Hello"), hasLinks()))
Burada, allOf bir Hamcrest eşleştiricisidir. allOf , geçen tüm eşleştiricilerle eşleşen bir eşleştirici döndürür ve burada, bir görünümü eşleştirmenin yanı sıra görünümün metin değerinde bağlantıların olup olmadığını kontrol etmek için kullanılır.
hasTextColor ()
hasTextColor () , int türünde tek bir bağımsız değişken kabul eder ve bağımsız değişken, rengin kaynak kimliğine başvurur . TextView ile rengine göre eşleşen bir eşleştirici döndürür . Yalnızca TextView için geçerlidir . Örnek kod aşağıdaki gibidir,
onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))
hasEllipsizedText ()
hasEllipsizedText () argümanı içermiyor. Uzun metne sahip ve eliptik (ilk .. on .. son) veya kesik (ilk…) TextView ile eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_text_view_id), hasEllipsizedText()))
hasMultilineText ()
hasMultilineText () argümanı içermiyor. Çok satırlı metin içeren TextView ile eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_test_view_id), hasMultilineText()))
hasBackground ()
hasBackground () , int türünde tek bir bağımsız değişken kabul eder ve bağımsız değişken, arka plan kaynağının kaynak kimliğine başvurur . Arka plan kaynaklarına göre görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))
hasErrorText ()
hasErrorText () , Matcher <String> türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün (EditText) hata dizesi değerine başvurur. Görünümün hata dizesini kullanarak görünümle eşleşen bir eşleştirici döndürür. Bu yalnızca EditText için geçerlidir . Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))
Dize argümanını da kabul eder. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))
hasImeAction ()
hasImeAction () , Matcher <Integer> türünde bir bağımsız değişken kabul eder ve bağımsız değişken, görünümün (EditText) desteklenen giriş yöntemlerine başvurur. Görünümün desteklenen giriş yöntemini kullanarak görünümü eşleştiren bir eşleştirici döndürür. Bu yalnızca EditText için geçerlidir . Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.editText_name),
hasImeAction(is(EditorInfo.IME_ACTION_GO))))
Burada EditorInfo.IME_ACTION_GO giriş yöntemleri seçeneklerinden biridir. hasImeAction () tamsayı bağımsız değişkenini de kabul eder. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.editText_name),
hasImeAction(EditorInfo.IME_ACTION_GO)))
supportsInputMethods ()
supportsInputMethods () argümanı içermiyor. Giriş yöntemlerini destekliyorsa, görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.editText_name), supportsInputMethods()))
isRoot ()
isRoot () argümanı içermiyor. Kök görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_root_id), isRoot()))
isDisplayed ()
isDisplayed () argümanı içermiyor. O anda görüntülenen görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isDisplayed()))
isDisplayingAtLeast ()
isDisplayingAtLeast () , int türünde tek bir bağımsız değişken kabul eder. En azından belirtilen yüzdeyle geçerli olarak görüntülenen görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))
isCompletelyDisplayed ()
isCompletelyDisplayed () argümanı içermiyor. Ekranda şu anda tamamen görüntülenen görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))
etkin()
isEnabled () argümanı içermiyor. Etkinleştirilmiş görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isEnabled()))
isFocusable ()
isFocusable () argümanı içermiyor. Odaklanma seçeneğine sahip görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isFocusable()))
hasFocus ()
hasFocus () argümanı içermiyor. O anda odaklanmış olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), hasFocus()))
isClickable ()
isClickable () argümanı içermiyor. Tıklama seçeneği olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isClickable()))
seçildi()
isSelected () argümanı içermiyor. Halihazırda seçili olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isSelected()))
isChecked ()
isChecked () argümanı içermiyor. CompoundButton (veya onun alt türü) türündeki görünümle eşleşen ve denetlenmiş durumda olan bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_view_id), isChecked()))
isNotChecked ()
isNotChecked () , isChecked'in tam tersidir. Örnek kod aşağıdaki gibidir *,
onView(allOf(withId(R.id.my_view_id), isNotChecked()))
isJavascriptEnabled ()
isJavascriptEnabled () argümanı yok. JavaScript'i değerlendiren Web Görünümü ile eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))
Ebeveynle()
withParent () , Matcher <View> türünde bir bağımsız değişken kabul eder. Argüman bir görüşe atıfta bulunur. Ana görünüm olan belirtilen görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))
hasSibling ()
hasSibling () , Matcher> View <türünde bir bağımsız değişken kabul eder. Argüman bir görüşe atıfta bulunur. Aktarılan görünümün kardeş görünümlerinden biri olduğu görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(hasSibling(withId(R.id.siblingView)))
withChild ()
withChild () , Matcher <View> türünde bir bağımsız değişken kabul eder. Argüman bir görüşe atıfta bulunur. Alt görünümün geçtiği görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))
hasChildCount ()
hasChildCount () , int türünde bir bağımsız değişken kabul eder. Argüman, bir görünümün çocuk sayısını ifade eder. Bağımsız değişkende belirtildiği gibi tam olarak aynı sayıda alt görünüme sahip olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(hasChildCount(4))
hasMinimumChildCount ()
hasMinimumChildCount () , int türünde bir bağımsız değişken kabul eder. Argüman, bir görünümün çocuk sayısını ifade eder. Bağımsız değişkende belirtildiği gibi en az çocuk görünümü sayısına sahip olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(hasMinimumChildCount(4))
hasDescendant ()
hasDescendant () , Matcher <View> türünde bir bağımsız değişken kabul eder. Argüman bir görüşe atıfta bulunur. Görünüm hiyerarşisindeki alt görünümden biri olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(hasDescendant(withId(R.id.descendantView)))
isDescendantOfA ()
isDescendantOfA () , Matcher <View> türünde bir bağımsız değişken kabul eder. Argüman bir görüşe atıfta bulunur. Görünüm hiyerarşisindeki ata görünümlerinden biri olan görünümle eşleşen bir eşleştirici döndürür. Örnek kod aşağıdaki gibidir,
onView(allOf(withId(R.id.myView), isDescendantOfA(withId(R.id.parentView))))