《Android移动应用开发》测试应用_第1页
《Android移动应用开发》测试应用_第2页
《Android移动应用开发》测试应用_第3页
《Android移动应用开发》测试应用_第4页
《Android移动应用开发》测试应用_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

测试App2023/9/28152023/9/28AndroidStudio测试环境单元测试目录CONTENT12自动化UI测试组件测试34参考教材:《Android应用开发项目化教程》AndroidStudio测试环境项目中的测试新建的Android项目,自动生成如下测试包androidTest是AndroidInstrumentationTests的文件夹运行在Android设备上test是UnitTests的文件夹运行在JVM上(不会访问Android框架层的API)1AndroidStudio测试环境项目中的测试新建的Android项目,自动生成如下测试包androidTesttest1AndroidStudio测试环境项目中的测试新建的Android项目,自动生成如下测试包1AndroidStudio测试环境项目中的测试app/build.gradletestInstrumentationRunner

把AndroidJUnitRunner设置成默认的testInstrumentationRunnerandroidTestCompile 把Espresso作为UI自动化测试testCompile 把JUnit4作为单元测试框架1单元测试本地单元测试配置测试环境目录module-name/src/test/java依赖2单元测试本地单元测试创建本地测试类JUnit4特点不必继承junit.framework.TestCase类也不用在测试方法的前面加上’test’关键字也不用任何junit.framework或junit.extensions包里的类测试方法必须以@Test注解为开头2单元测试本地单元测试创建本地测试类2单元测试本地单元测试MockAndroid依赖步骤1.在build.gradle文件中引入Mockito库的依赖。2.在开始定义单元测试类之前,添加@RunWith(MockitoJUnitRunner.class)的注解。这个注解告诉Mockito测试运行器,对该框架的使用是正确的,同时可以简化mock对象的初始化。3.为了对有Android依赖的工程创建一个mock对象,在字段的定义前面,添加@Mock注解4.为了对依赖的表现进行打桩,可以声明一个条件当该条件满足的时候返回指定的值,通过调用when()和thenReturn()方法。2单元测试本地单元测试MockAndroid依赖2单元测试本地单元测试运行本地单元测试步骤1.在工程窗口中,右键工程同时同步工程。2.在工程窗口中,定位到单元测试类或者方法,然后右键它选择运行。运行单元测试目录下的所有测试,在目录上右键同时选择运行测试。2单元测试Instrumented单元测试设置测试环境目录module-name/src/androidTests/java依赖2单元测试Instrumented单元测试创建一个Instrumented单元测试类要求instrumented单元测试类应该被写为一个JUnit4测试类。在开始定义测试类前添加注解:@RunWith(AndroidJUnit4.class)。需要具体声明AndroidTestingSupportLibrary提供的AndroidJUnitRunner类作为默认测试运行器。2单元测试Instrumented单元测试创建一个Instrumented单元测试类示例2单元测试Instrumented单元测试创建一个测试套装特点一个测试套装被包含在一个测试包中,和主应用的包相似。通常,测试套装包的名字一般以.suite扩展名结尾为单元测试创建测试套装时,导入JUnitRunWith和Suite类添加@RunWith(Suite.class)和@Suite.SuitClasses()注解。在@Suite.SuiteClasses()注解中,列出独立的测试类或者测试套装作为参数。2单元测试Instrumented单元测试创建一个测试套装示例2单元测试Instrumented单元测试运行Instrumented单元测试在工程窗口,定位到instrumented测试类或者方法,接着右键和运行它使用Android测试配置。为了运行所有的在instrumented测试目录里的测试,在该目录上右键然后选择运行测试。2自动化UI测试单个App的UI测试EspressoAndroidTestingSupportLibrary提供的Espresso测试框架,提供了编写UI测试的Api,用来模拟和单个目标App的交互。使用Espresso的一个关键好处是它提供了自动的同步测试动作。Espresso可以监测主线程什么时候是空闲的,所以可以在合适的时间运行测试命令,来提高测试的可靠性。Espresso测试框架基于instrumentationApi并且依靠AndroidJUnitRunner测试器来工作的。3自动化UI测试单个App的UI测试设置Espresso注意,关闭一下动画窗口缩放动画过渡缩放动画动画程序时长缩放3自动化UI测试单个App的UI测试创建一个Espresso测试类规则寻找一个想测试的Activity的UI组件,通过调用onView()方法,或者onData()方法来为AdapterView的控制。模拟和UI组件之间的用户交互,比如调用ViewInteraction.perform()或者DataInteraction.perform()方法,同时将用户的具体动作传入。为了让UI组件的多个操作按照顺序执行,使用逗号分隔符在方法参数里将他们串联起来。按需重复上述动作,来模拟用户和目标App的多个Activity进行交互。使用ViewAssertions方法来检查在进行了上述一系列的用户交互后,UI是否有正确的状态或者是表现。3自动化UI测试单个App的UI测试创建一个Espresso测试类示例3自动化UI测试单个App的UI测试创建一个Espresso测试类和ActivityTestRule一起使用通过使用ActivityTestRule,测试框架加载正在测试中的App的Activity,在每个被@Test、@Before注解的方法之前,框架负责在测试完成后关闭这个Activity和调用所有被@After注解的方法来运行。3自动化UI测试单个App的UI测试创建一个Espresso测试类和ActivityTestRule一起使用示例3自动化UI测试单个App的UI测试创建一个Espresso测试类和ActivityInstrumentationTestCase2一起使用在测试类中注入一个Instrumentation实例调用injectInstrumentation()方法同时将InstrumentationRegistry.getInstrumentation()的结果作为参数传递3自动化UI测试单个App的UI测试创建一个Espresso测试类和ActivityInstrumentationTestCase2一起使用示例3自动化UI测试单个App的UI测试创建一个Espresso测试类获取UI组件在Espresso和App交互之前,必须首先具体声明对应的UI组件或者View。Espresso支持使用Hamcrestmatchers来具体声明App中的Views和Adapters.调用onView()方法同时传递一个view匹配器,他具体声明了目标view。onView()方法返回一个ViewInteraction对象,它允许测试和目标View之间的交互。3自动化UI测试单个App的UI测试执行ActionsViewActions提供的动作ViewActions.click():对一个View的点击。ViewActions.typeText():点击一个View然后输入特定的字符串。ViewActions.scrollTo():滚动至指定的View。ViewActions.pressKey():执行一个按键操作,按照给定的KeyCodeViewActions.clearText():清除目标View的Text3自动化UI测试单个App的UI测试验证结果调用ViewInteraction.check()或者DataInteraction.check()方法来断言目标View的反馈是否和预期状态相匹配。ViewAssertions提供的方法doesNotExist:断言在当前的View层级中没有符合标准的View相匹配。matches:断言指定的View在当前View层级中存在同时他的状态和给定的Hamcrest匹配器相匹配。selectedDescendentsMatch:断言指定的父View的子View存在,并且他们的状态和给定的Hamcrest匹配器相匹配。3自动化UI测试单个App的UI测试验证结果示例3自动化UI测试跨越多个App进行UI测试设置UIAutomator添加依赖库3自动化UI测试跨越多个App进行UI测试设置UIAutomatorUiautomatorviewerUiautomatorviewer工具提供了方便的视觉界面来检查布局层级和查看UI组件的属性,他们在设备的前台是可见的。借助这些信息可以使用UIAutomator创建更细腻的测试。3自动化UI测试跨越多个App进行UI测试设置UIAutomator流程加载一个目标APP到物理设备上。将该设备连接到开发机器上打开一个终端然后定位到<android-sdk>/tools/目录下。用命令运行该工具

$uiautomatorviewer3自动化UI测试跨越多个App进行UI测试设置UIAutomator查看应用的UI的特性在uiautomatorviewer界面,点击设备截屏按钮。通过uiautomatorviewrtool悬浮在左面板的快照可以概览UI组件定义。该组件的特性被列在右面板下方,布局层级在右面版的上方。选择性的点击ToggleNAF节点按钮,来查看那些不会被UIAutomator获取的UI组件,不过只能获取这些组件的有限信息。3自动化UI测试跨越多个App进行UI测试确保Activity可获得Activity中实现以下最基本的优化来支持UIautomator使用android:contentDescription属性来给ImageButton、ImageView、CheckBox加标签和其他的用户界面控制组件。给EditText提供一个android:hint属性来代替内容描述。将android:hint属性和任何的图形icon结合起来给用户提供反馈(比如,状态信息)使用uiautomatorviewer工具类确保UI组件可以被测试框架获取到。也可以测试应用程序通过打开获取服务像TalkBack然后通过触摸来浏览,然后尝试着仅在一个方向上使用应用。3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类规则获取UiDevice对象来访问想测试的设备,通过调用getInstance()方法然后传递一个Instrumentation对象参数进入通过调用findObject()方法,获取一个UIObject对象来访问在设备上展示的UI组件。通过调用UiObject的方法来模拟一个具体的和UI组件之间的交互。比如,调用performMultiPointerGesture()来模拟复杂的触摸手势,和setText()来编辑一个text字段。检查当这些用户交互执行后,UI是否按照期望的状态或表现给予了回馈。3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类访问UI组件UiDevice是最基本的访问和操作设备状态的方式。在测试中,可以调用UiDevice方法来检查不同的特性,比如当前方向或者展示的尺寸。可以使用UiDevice对象来执行设备级别的动作,比如对设备进行旋转,按压D-pad硬件按钮,以及按压Home和Menu按钮。最好的做法是从设备的Home屏开始测试,在Home屏幕,可以调用UIAutomatorApi提供的方法来选择和具体的UI元素进行交互。3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类访问UI组件示例:获取UiDevice的实例和模拟按压Home键3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类访问UI组件示例:创建一个UiObject实例3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类声明一个selectorUiSelector类:代表了一个对当前显示的UI的具体元素的查询如果有多个匹配元素被找到的话,在布局层级中第一个匹配到的元素将被作为一个UiObject对象返回。当构建一个UiSelector的时候,可以将多个属性串联起来,来重新组织一个查询。如果没有找到相匹配的UI元素,将会抛出一个UiAutomatorObjectNotFoundException可以将childSelector()方法和UiSelector实例相互嵌套来使用。3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类声明一个selector示例3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类执行Actionsclick():点击UI元素可视区域的中心dragTo():拖拽这个对象至指定的坐标setText():在清除完该字段的内容后,给该字段设置内容。相反的,clearTextField()方法清除一个可编辑字段中存在的内容。swipeUp():在UiObject对象上执行swipeup动作,相似的,swipeDown(),swipeLeft()和swipeRight()方法执行相匹配的动作。3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类执行Actions示例3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类在集合上执行操作使用UiCollection类模拟和一个集合的条目进行交互。为了创建一个UiCollection对象,具体声明一个UiSelector它寻找一个UI容器或者一个其它子UI元素的包装器,比如一个布局view它包含子UI元素。3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类在集合上执行操作示例3自动化UI测试跨越多个App进行UI测试创建一个UIAutomator测试类在可滚动的view中执行动作使用UiScrollable类来模拟水平或者竖直方向上的滚动。3自动化UI测试跨越多个App进行UI测试验证结果可以使用标准的JUnit断言方法来测试App中的UI元素是否返回预期的结果3组件测试Service测试ServiceTestRuleServiceTestRule类是一个JUnit4规则,它在单元测试方法运行之前启动Service,在测试完成的时候关闭Service。通过使用这个测试规则,可以确保在测试方法运行之前Service的连接总是建立的。使用@Rule注解在测试中来创建ServiceTestRule实例4组件测试Service测试ServiceTestRule示例4组件测试ContentProvider测试ProviderTestCase2特点ProviderTestCase2的构造方法创建一个IsolatedContext对象,他允许文件和数据库的操作,但是断绝了和Android系统之间其它的交互。文件和数据库的操作他们本身发生的位置是本地的设备或者模拟器,并且有一个特殊的前缀。构造方法接着创建一个MockCotentResolver作为resolve来进行测试。最后,构造方法创建一个Provider的实例来进行测试。4组件测试ContentProvider测试ProviderTestCase2指导方针使用resolver方法来测试:尽管可以在ProviderTestCase2中实例化一个Provider对象,应该经常使用合适的URI并借助解析器对象来进行测试。这样做来确保测试Provider通过执行相同的交互,一个普通的应用程序将会使用的。4组件测试ContentProvider测试Provide

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论