- Espresso 测试框架教程
- Espresso 测试 - 首页
- 介绍
- 设置说明
- 在 Android Studio 中运行测试
- JUnit 概述
- 架构
- 视图匹配器
- 自定义视图匹配器
- 视图断言
- 视图操作
- 测试 AdapterView
- 测试 WebView
- 测试异步操作
- 测试意图
- 测试多个应用程序的 UI
- 测试录制器
- 测试 UI 性能
- 测试辅助功能
- Espresso 测试资源
- Espresso 测试 - 快速指南
- Espresso 测试 - 有用资源
- Espresso 测试 - 讨论
Espresso 测试框架 - 视图断言
如前所述,视图断言用于断言实际视图(使用视图匹配器查找)和预期视图相同。示例代码如下:
onView(withId(R.id.my_view)) .check(matches(withText("Hello")))
这里:
onView() 返回对应于匹配视图的 ViewInteration 对象。ViewInteraction 用于与匹配的视图进行交互。
withId(R.id.my_view) 返回一个视图匹配器,它将与 id 属性等于 my_view 的视图(实际视图)匹配。
withText(“Hello”) 也返回一个视图匹配器,它将与文本属性等于 Hello 的视图(预期视图)匹配。
check 是一个方法,它接受类型为 ViewAssertion 的参数,并使用传入的 ViewAssertion 对象进行断言。
matches(withText(“Hello”)) 返回一个视图断言,它将执行断言实际视图(使用 withId 查找)和预期视图(使用 withText 查找)相同这一实际工作。
让我们学习 Espresso 测试框架提供的一些用于断言视图对象的方法。
doesNotExist()
返回一个视图断言,确保视图匹配器找不到任何匹配的视图。
onView(withText("Hello")) .check(doesNotExist());
这里,测试用例确保没有文本为 Hello 的视图。
matches()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并与目标视图匹配器匹配的视图匹配。
onView(withId(R.id.textView_hello)) .check(matches(withText("Hello World!")));
这里,测试用例确保具有 id R.id.textView_hello 的视图存在并与文本为 Hello World! 的目标视图匹配。
isBottomAlignedWith()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且底部与目标视图匹配器对齐。
onView(withId(R.id.view)) .check(isBottomAlignedWith(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且底部与具有 id R.id.target_view 的视图对齐。
isCompletelyAbove()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且完全位于目标视图匹配器上方。
onView(withId(R.id.view)) .check(isCompletelyAbove(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且完全位于具有 id R.id.target_view 的视图上方。
isCompletelyBelow()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且完全位于目标视图匹配器下方。
onView(withId(R.id.view)) .check(isCompletelyBelow(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且完全位于具有 id R.id.target_view 的视图下方。
isCompletelyLeftOf()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且完全位于目标视图匹配器左侧。
onView(withId(R.id.view)) .check(isCompletelyLeftOf(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且完全位于具有 id R.id.target_view 的视图左侧。
isCompletelyRightOf()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且完全位于目标视图匹配器右侧。
onView(withId(R.id.view)) .check(isCompletelyRightOf(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且完全位于具有 id R.id.target_view 的视图右侧。
isLeftAlignedWith()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且左侧与目标视图匹配器对齐。
onView(withId(R.id.view)) .check(isLeftAlignedWith(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且左侧与具有 id R.id.target_view 的视图对齐。
isPartiallyAbove()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且部分位于目标视图匹配器上方。
onView(withId(R.id.view)) .check(isPartiallyAbove(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且部分位于具有 id R.id.target_view 的视图上方。
isPartiallyBelow()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且部分位于目标视图匹配器下方。
onView(withId(R.id.view)) .check(isPartiallyBelow(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且部分位于具有 id R.id.target_view 的视图下方。
isPartiallyLeftOf()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且部分位于目标视图匹配器左侧。
onView(withId(R.id.view)) .check(isPartiallyLeftOf(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且部分位于具有 id R.id.target_view 的视图左侧。
isPartiallyRightOf()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且部分位于目标视图匹配器右侧。
onView(withId(R.id.view)) .check(isPartiallyRightOf(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且部分位于具有 id R.id.target_view 的视图右侧。
isRightAlignedWith()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且右侧与目标视图匹配器对齐。
onView(withId(R.id.view)) .check(isRightAlignedWith(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且右侧与具有 id R.id.target_view 的视图对齐。
isTopAlignedWith()
接受目标视图匹配器并返回一个视图断言,确保视图匹配器(实际视图)存在并且顶部与目标视图匹配器对齐。
onView(withId(R.id.view)) .check(isTopAlignedWith(withId(R.id.target_view)))
这里,测试用例确保具有 id R.id.view 的视图存在并且顶部与具有 id R.id.target_view 的视图对齐。
noEllipsizedText()
返回一个视图断言,确保视图层次结构不包含省略号或被截断的文本视图。
onView(withId(R.id.view)) .check(noEllipsizedText());
noMultilineButtons()
返回一个视图断言,确保视图层次结构不包含多行按钮。
onView(withId(R.id.view)) .check(noMultilineButtons());
noOverlaps()
返回一个视图断言,确保可赋值给 TextView 或 ImageView 的后代对象不会相互重叠。它还有另一个选项,它接受目标视图匹配器并返回一个视图断言,确保与目标视图匹配的后代视图不会重叠。