English 中文(简体)
View Matchers
  • 时间:2024-03-24 04:23:05

Espresso Testing Framework - View Matchers


Previous Page Next Page  

埃斯普洛框架提供了许多观点匹配者。 校对的目的是利用Id、文本和儿童观点的可用性等不同观点的属性。 每个配对人都符合该意见的特定属性,并适用于特定类型的观点。 例如,withId 匹配器:Id 观点的财产适用于所有观点,而与Text对等相对应的是该观点的Text财产,只适用于TextView

在本章中,让我们学习由压缩测试框架提供的不同配对器,并学习建造的Hamcrest图书馆。

Hamcrest Library

图书馆是信标测试框架的一个重要图书馆。 Hamcrest本身就是书写对应物体的框架。 Espresso框架广泛使用Hamcrest图书馆,必要时提供简单、可扩展的图书。

Hamcrest提供一个简单的功能assertThat,并收集对应器,以维护任何物体。 assertThat> 有三个论点:

    努力(检验说明,任择)

    目的(实际)

    计算机(预期)

让我们举一个简单的例子来检验一个清单物体是否具有预期价值。

import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@Test
pubpc void pst_hasValue() {
   ArrayList<String> pst = new ArrayList<String>();
   pst.add("John");
   assertThat("Is pst has John?", pst, hasItem("John"));
}

这里,hasItem 回归者,核对实际清单是否指明了该项目的价值。

Hamcrest有许多内装配对器,还有创建新配对器的备选办法。 用于压缩测试框架的重要内在配对器如下:

anything - always matchers

逻辑匹配器

    - 只有在所有配对人成功的情况下,才接受任何配对器和配对机。

    - 接受任何人数的配对者,如果任何配对者成功,则配对人。

    - 只有在配对人失败,反之亦然的情况下,才接受配对人。

Text based matchers

    - 用来检验实际投入是否等于预期的扼杀忽视案例。

    。 - 用于测试实际投入是否等于特定扼杀手法和白色空间。

    containsString - 用于测试实际投入是否含有具体指示。

    endsWith - 用于测试实际投入是否以具体指示开始。

    startsWith - 用于测试实际投入是否以具体指示结束。

Number based matchers

    - 用于测试实际投入是否接近预期数量。

    greater Than - 用于测试实际投入是否大于预期数量。

    greater ThanOrEqual To - 用于测试实际投入是否大于或等于预期数量。

    - 用于测试实际投入是否少于预期数量。

    lessThanOrEqual To - 用于测试实际投入是否少于预期数量。

Object based matchers

    - 用于测试实际投入是否等于预期目标

    - 用于测试实际投入是否用于计算方法。

    instance 在中,用于测试实际投入是否属于预期类别。

    - 用于测试实际投入是否符合预期类型。

    - 用于测试实际投入是否无效。

    - 用于测试实际投入和预期结果是否相同。

    - 用于测试实际投入是否具有预期财产

is − Sugar or short cut for equalTo

Matchers

Espresso提供意见一致和看法的“意见”方法。 它接受观点对手和回归观点的反对,以便与相应的观点相互作用。 经常使用的观点匹配者名单如下:

withId()

withId(接受关于类型理由的论点,该论点提到了这一观点。 它交还了一名配对员,该配对者使用该意见。 样本代码如下:

onView(withId(R.id.testView))

withText()

<>Text(>接受关于string的论证,该论点提及该观点的文本财产的价值。 它交还了一名配对人,与使用该意见的案文价值的看法相匹配。 它只适用于TextView。 样本代码如下:

onView(withText("Hello World!"))

withContentDescription()

withContentDescription(> 接受“string”的说法,该论点提及该观点的内容描述财产的价值。 它交还了一名配对人,使用对意见的描述与观点相符。 样本代码如下:

onView(withContentDescription("blah"))

我们还可以通过案文价值的资源,而不是案文本身。

onView(withContentDescription(R.id.res_id_blah))

hasContentDescription()

hasContentDescription() 没有任何论点。 它交还了一名配对人,这与任何内容描述的观点一致。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), hasContentDescription()))

withTagKey()

<>TagKey()接受“string”类论点,该论点提及该观点的关键。 它交还了一台配对机,与使用其标签钥匙的看法相匹配。 样本代码如下:

onView(withTagKey("blah"))

我们还可以通过tag子的资源,而不是标签本身。

onView(withTagKey(R.id.res_id_blah))

withTagValue()

<>TagValue()接受类型论点 Match子和lt子;论点提到该观点的标签价值。 它交还了一台配对机,使用其标签价值对观点进行对比。 样本代码如下:

onView(withTagValue(is((Object) "blah")))

这里,is是Hamcrest配对器。

withClassName()

withClassName(>take a case of打字机<String> 论点提及该观点的类别名称价值。 它交还了一名配对员,该配对者使用其类别名称与观点相符。 样本代码如下:

onView(withClassName(endsWith("EditText")))

这里,endsWith是Hamcrest配对器和返回匹配器;String>

withHint()

<withHint(>接受“Mater<”类论点;String>论点提及该观点的 hint价值。 它交还了一名配对员,该配对者采用该观点。 样本代码如下:

onView(withClassName(endsWith("Enter name")))

withInputType()

with InputType()接受关于int的论证,该论点提到了意见的输入类型。 它交还了一台配对机,该配对器使用其投入类型与意见相符。 样本代码如下:

onView(withInputType(TYPE_CLASS_DATETIME))

这里,TYPE_CLASS_DATETIME/i>是指edit观看支持日期和时间。

withResourceName()

<>ResourceName(>接受“匹配”类型的论点;String>论点提及该观点的类别名称价值。 它交还了一名配对人,使用该观点的资源名称与意见相符。 样本代码如下:

onView(withResourceName(endsWith("res_name")))

它还接受直截了当的论点。 样本代码如下:

onView(withResourceName("my_res_name"))

withAlpha()

<withAlpha(接受关于float的论证,该论点提及该观点的字母数值。 它交还了一台配对机,与使用该观点的甲型数值的观点相吻合。 样本代码如下:

onView(withAlpha(0.8))

withEffectiveVisibipty()

with EffectiveVisibipty(> 接受“ViewMatchers.Visibipty

onView(withEffectiveVisibipty(withEffectiveVisibipty.INVISIBLE))

withSpinnerText()

withSpinnerText() 接受“匹配”一词的论点;String>这一论点提到了Spinner目前选定的观点的价值。 它交还了一台配对机,该配对机根据自己选定的物品的价值对等。 样本代码如下:

onView(withSpinnerText(endsWith("USA")))

它接受扼杀理由或资源。 样本代码如下:

onView(withResourceName("USA"))
onView(withResourceName(R.string.res_usa))

withSubstring()

with SubString ( is similar to withText() 除此以外,还有助于测试该观点案文价值的分数。

onView(withSubString("Hello"))

hasLinks()

hasLinks( 它没有论点,它回去了一位对口人,这符合有联系的观点。 该条只适用于案文。 样本代码如下:

onView(allOf(withSubString("Hello"), hasLinks()))

这里,allOf是Hamcrest配对器。 allOf 回归配对器,与配对器的过继器相匹配,并用于对观点进行对比,并检查该观点在文本价值上是否有关联。

hasTextColor()

hasTextColor() 接受单一类型的争辩,而论点则指肤色的资源。 它交还了一张配对机,根据彩色对TextView。 它只适用于TextView。 样本代码如下:

onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))

hasElppsizedText()

hasElppizeText() 没有任何论点。 它交还了一名配对员,与有长篇文字和短片(头10. 最后)或剪辑(第一......)的案文相匹配。 样本代码如下:

onView(allOf(withId(R.id.my_text_view_id), hasElppsizedText()))

hasMultipneText()

<hasMultipneText(>) 没有任何理由。 它交还了一台配对机,与具有任何多行文字的文本相匹配。 样本代码如下:

onView(allOf(withId(R.id.my_test_view_id), hasMultipneText()))

hasBackground()

hasBackground() 接受单一类型的争辩,其论点指的是背景资源的来源。 它交还了一名配对员,这符合根据其背景资源提出的意见。 样本代码如下:

onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))

hasErrorText()

<hasErrorText(>)接受“匹配”的论据;String>这一论点提及该观点的错误(EditText)说明价值。 它交还了一名配对员,该配对者使用错误表述的观点。 这只适用于EditText。 样本代码如下:

onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))

它还接受直截了当的论点。 样本代码如下:

onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))

hasImeAction()

<>hasImeAction()接受“Mater<”类论点;Integer>这一论点提到该观点支持了投入方法。 它回收了一台配对器,该配对器使用支持的意见。 这只适用于EditText。 样本代码如下:

onView(allOf(withId(R.id.editText_name),
hasImeAction(is(EditorInfo.IME_ACTION_GO))))

页: 1 正在采用投入方法选择。 <>hasImeAction()也接受有关愤怒的论点。 样本代码如下:

onView(allOf(withId(R.id.editText_name),
hasImeAction(EditorInfo.IME_ACTION_GO)))

supportsInputMethods()

supportsInputMethods() 没有任何论点。 它交还了一台配对机,如果它支持投入方法,则与这一观点相匹配。 样本代码如下:

onView(allOf(withId(R.id.editText_name), supportsInputMethods()))

isRoot()

isRoot( 没有任何论点。 它回归了一种与根基相匹配的对比。 样本代码如下:

onView(allOf(withId(R.id.my_root_id), isRoot()))

isDisplayed()

isDisplayed(> 没有任何论点。 它交还了一名配对员,这符合目前展示的观点。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isDisplayed()))

isDisplayingAtLeast()

isDisplayingAtLeast()接受单一类型词句。 它交还了一名配对员,这符合目前至少显示特定百分比的观点。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))

isCompletelyDisplayed()

isCompletelyDismeted()。 没有任何论点。 它交还了一名配对员,这符合目前完全在屏幕上展示的观点。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))

isEnabled()

sEnabled( 没有任何论点。 它交还了一名配对员,这符合人们的看法。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isEnabled()))

isFocusable()

Focusable() 没有任何论点。 它交还了一名配对员,这符合有重点选择的观点。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isFocusable()))

hasFocus()

<hasFocus()无任何理由。 它交还了一名配对员,这符合目前重点讨论的观点。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), hasFocus()))

isCpckable()

isCpckable() 没有任何论点。 它交还了一名配对员,这符合点击选择的看法。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isCpckable()))

isSelected()

www.un.org/Depts/DGACM/index_french.htm 没有任何论点。 它交还了一名配对员,这符合目前选定的观点。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isSelected()))

isChecked()

isChecked() 没有任何论点。 它交还了一台配对机,与ChildButton(或其子类)类的观点相匹配,并处于检查状态。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isChecked()))

isNotChecked()

s NotChecked()刚刚对面。 样本代码如下:

onView(allOf(withId(R.id.my_view_id), isNotChecked()))

isJavascriptEnabled()

isJavascriptEnabled() 没有任何论点。 它交还了一名配对员,与正在评估 Java本的网上意见相匹配。 样本代码如下:

onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))

withParent()

withParent ( 接受一则“匹配”;“意见”; 论点提到了一种观点。 它交还了一名配对人,这符合特定观点即家长的观点。 样本代码如下:

onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))

hasSibpng()

<hasSibpng(>接受一则“Mater>”类;View< 论点提到了一种观点。 它交还了一名配对员,这符合其切身的看法。 样本代码如下:

onView(hasSibpng(withId(R.id.sibpngView)))

withChild()

withChild()接受一则“匹配”和“意见”的论点; 论点提到了一种观点。 它交还了一名配对员,这符合儿童的意见。 样本代码如下:

onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))

hasChildCount()

hasChildCount()。 接受一种类型的论据。 论点提到儿童的意见。 它交还了一名对口人员,这种看法与论点中具体阐明的完全相同。 样本代码如下:

onView(hasChildCount(4))

hasMinimumChildCount()

hasMinimumChildCount()接受一种类型的内乱论点。 论点提到儿童的意见。 它交还了一名配对员,这符合至少有论据中具体列明的儿童观点数量的观点。 样本代码如下:

onView(hasMinimumChildCount(4))

hasDescendant()

hasDescendant()。 接受一则“匹配”;“意见”; 论点提到了一种观点。 它回归了一种对口,与过去的观点一致,即认为是观点等级的后代。 样本代码如下:

onView(hasDescendant(withId(R.id.descendantView)))

isDescendantOfA()

isDescendantOfA()接受一则“搭配”类;View> 论点提到了一种观点。 它回馈了一种对口,这种看法与过去的观点一致,是观点等级的常识之一。 样本代码如下:

onView(allOf(withId(R.id.myView), isDescendantOfA(withId(R.id.parentView))))
Advertisements