众所周知,UiAutomation是测试原安卓APP的最佳工具。随着DevOps的普及,我们需要尽快发现程序中的缺陷,所以单元测试变得非常重要。Android引入了Espresso测试框架。Espresso和UiAutomation最显著的区别是UiAutomation可以测试一个APP的多个接口,而Espresso只能测试一个APP的一个接口。此外,UiAutomation可以独立测试应用程序来创建特殊的项目,而Espresso必须构建在要测试的应用程序的同一目录下。让我给你简单介绍一下意式浓缩咖啡。
要执行浓缩咖啡,首先,在build.gradle()模块中进行以下配置。应用程序)。
android {
…
}
buildTypes {
发布{
minifyEnabled false
proguardFiles getDefaultProguardFile(' proguard-Android-optimize . txt '),' proguard-rules.pro '
}
}
包装选项{
排除“LICENSE.txt”
}
}
依赖项{
…
androidTestImplementation ' com . Android . support . test:runner:0.5 '
androidTestImplementation(' com . Android . support . test . espresso:espresso-core:2 . 2 . 2 ',{
排除组:' com.android.support ',模块:' support-annotations '
})}
这里要特别注意:com . Android . support . test:Runner,请用0.5版。最新版本1.0有bug。
同步完成后,我们在androidTest中创建待测试代码的测试代码。这是浓缩咖啡的代码。
package com . example . espresso . demo 4;
导入Android . support . test . filters . large Test;
导入Android . support . test . rule . activitytestrule;
导入Android . support . test . runner . androidjunit 4;
导入静态Android . support . test . espresso . espresso . OnView;
导入静态Android . support . test . espresso . action . ViewActions . click;
导入static Android . support . test . espresso . action . view actions . closesoftkeyboard;
导入静态Android . support . test . espresso . action . ViewActions . replace text;
导入static Android . support . test . espresso . assessment . viewcassessments . matches;
import static Android . support . test . espresso . matcher . root matchers . with ecorview;
导入static Android . support . test . espresso . matcher . viewmathers . isdisplayed;
导入static Android . support . test . espresso . matcher . viewmathers . with id;
导入static Android . support . test . espresso . matcher . ViewMatchers . with text;
导入static org . hamcrest . core . stringstartwith . starts with;
import static org . hamcrest . matchers . not;
导入org . JUnit . rule;
import org . JUnit . test;
import org . JUnit . runner . runwith;
@RunWith(AndroidJUnit4.class)
公共类mainactivityinstrumentation test {
私有静态最终字符串用户名= "古香";
私有静态最终字符串密码= " 123456 ";
@规则
公共活动规则<。主要活动>。mActivityRule =新活动规则<。>。(main activity . class);
@测试
@大型测试
public void testDemo4(){
onView(带Id(R.id.username))。执行(替换文本(用户名),关闭软键盘());
onView(带Id(R.id.password))。执行(替换文本(密码),关闭软键盘());
OnView(带文本(“登录”)。执行(click());
打开视图(带文本(以“用户名或密码”)开始)
。in root(with Recoverview(not(MactivityRule . GetActivity()。getWindow()。getDecorView())))
。check(matches(Isdisplayed()));
//onView(withId(R.id.tv1))。检查(匹配(带文本(预期文本)));
}
}
该代码的作用是在登录页面输入错误的登录名或密码,点击【登录】,测试系统是否给出“用户名或密码”的错误信息。
1、准备工作
package com . example . espresso . demo 4;
首先,确保测试代码包与产品代码包一致。
@规则
公共活动规则<。主要活动>。mActivityRule =新活动规则<。>。(main activity . class);
说要测试的是产品代码中的MainActivity.class模块,我们把测试模块变量赋给了变量mActivityRule。
2.定位
onView(带Id(R.id.username))。执行(替换文本(用户名),关闭软键盘());
在此代码中,操作由onView函数执行,而withId(R.id.username)由应用程序的R.id.username定位,其中Id名称是username,在r文件中定义,在产品代码中定义为R.java。除了定位withId,还可以使用withText(String):元素的文本名,withClassName():元素的类名,withContentDeion():元素的描述信息等。也可以通过多元素属性的联合定位来实现,比如:
onView(allOf(带Id(R.id.button_signin),带text(" Sign-in "));
请使用标识为“登录”,文本为“登录”的元素。此外,您还可以在定位中使用no函数来表示“否”,例如:
onView(AlloF(with id(r . id . button _ Sign in),not(with text(" Sign-out ")));
id为R.id.button_signin但文本不是Sign-in的元素。
除了用onView进行定位,还可以用onData进行定位。
onData(allOf(is(instance of(String . class)),is(" Americano "));
假设一个Spinner控件,我们要点击“Americano”,可以通过上面的语句定位。我们假设它是一个Listview,需要点击Listview中第二项的按钮,所以需要这样写。
onData(Matchers.allOf())
。in adapter view(id为(r . id . photo _ GridView))//list view的id
的位置。at位置(1) //
。onchildview(id为(r . id . imageview _ photo))//项中的子控件id
3.运作
执行之后是对定位的元素执行操作。常用方法如下。
ViewActions.replaceText()
清除空然后输入
ViewActions.typeText()
单击事件以输入指定的文本内容
ViewActions.click()
点击
ViewActions.scrollTo()
幻灯片
ViewActions.pressKey()
按键
ViewActions.clearText():
Clear 空文本
另外,上例中的“closeSoftKeyboard()”是输入字符后折叠键盘的意思。
4.断言
一般断言如下。
onView(带Id(R.id.tv1))。检查(匹配(带文本(预期文本)));
方法check()表示检查,matches()表示匹配,matches()方法中的参数与定位相同。经常使用匹配()方法和。
不存在()
断言视图不存在
匹配()
断言视图存在并匹配列
selectedDescendentsMatch()
断言指定的子元素存在,并且它们的状态与某些列匹配
代码
打开视图(带文本(以“用户名或密码”)开始)
。in root(with Recoverview(not(MactivityRule . GetActivity()。getWindow()。getDecorView())))
。check(matches(Isdisplayed()));
检查Toast是一个很有用的方法,如果使用UiAutomation的话很难实现。
http://www.kylinpet.com
1.《android单元测试 Android单元测试框架Espresso介绍》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《android单元测试 Android单元测试框架Espresso介绍》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1052154.html