10.Android UiAutomator Junit 断言函数的使用
一、断言函数介绍
1.断言函数:
确定被测试的方法是否按照预期的效果正常工作
- 比如说:
if (假设成立){
通过测试
}else{
报错并终止当前用例测试
}
2.断言函数用例结构:
- 一个完整的测试用例必需要有断言函数
setUp//初始化
//测试用例,junit4版本才可以使用多条用例
test 初始化场景与数据
test 模拟操作步骤
test 断言
test 恢复场景
tearDown//回收初始化垃圾
3.断言函数Java错误类型:
1)Error:
一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误导致的应用程序中断,仅靠程序本身无法恢复和预防(断言)
2)Exeeption:
表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常(最常见的是UI对象找不到的异常)
二、断言函数API:
1.断言函数分类:
- 例如:
//断言两个对象是否相等
asserEquals(String message,Object expected,Object actual){
if (expected==null && actual==null){
return ;
}
if (expected!=null && expected.equals(actual)){
return
}
failNotEquals(message,expected,actual);
}
|
参数 |
说明 |
| Message | 可选消息,在断言失败后会抛出这个消息 |
| Expected | 期望的值 |
| Actual | 实际的值 |
2.相关API:
1)
| 方法 | 说明 |
| assertEquals(boolean,boolean) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,boolean,boolean) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(byte,byte) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,byte,byte) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(char,char) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,char,char) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(int,int) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,int,int) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(long,long) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,long,long) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(Object,Object) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,Object,Object) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(short,short) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,short,short) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,String) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
| assertEquals(String,String,String) | 如果期望(expected)和实际(actual)相等则通过,否则失败 |
- API示例:
public void testDemo1() throws UiObjectNotFoundException{
//断言相等的例子
assertEquals(5, add(2,3));
//断言不相等的例子
assertEquals(6, add(2,3));
}
//新建一个加法方便使用断言函数
public int add(int a,int b){
return a+b;
}
2)
浮点运算不是万全精确的,所以比较浮点数值的时候引入精确程度
assertEquals(double expected,double actual,double delta)
|
方法 |
说明 |
| assertEquals(double,double,double) | 如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败 |
| assertEquals(String,double,double,double) | 如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败 |
| assertEquals(float,float,float) | 如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败 |
| assertEquals(String,float,float,float) | 如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败 |
- API示例:
public void testDemo1() throws UiObjectNotFoundException{
//断言不相等的例子
assertEquals(0.3333, Double.valueOf(1)/3,0);
//断言相等的例子
assertEquals(0.3333, Double.valueOf(1)/3,4);
//断言相等的例子
assertEquals(0.3333, Double.valueOf(1)/3,0.0001);
}
//新建一个加法方便使用断言函数
public int add(int a,int b){
return a+b;
}
3)
|
方法 |
说明 |
| assertFalse(boolean) | 如果条件(condition)为False则通过,否则失败 |
| assertFalse(String,boolean) | 如果条件(condition)为False则通过,否则失败 |
| assertTrue(boolran) | 如果条件(condition)为True则通过,否则失败 |
| assertTrue(String,boolran) | 如果条件(condition)为True则通过,否则失败 |
| assertNotNull(Object) | 如果条件(condition)为非空则通过,否则失败 |
| assertNotNull(String,Object) | 如果条件(condition)为非空则通过,否则失败 |
| assertNull(Object) | 如果条件(condition)为空则通过,否则失败 |
| assertNull(String,Object) | 如果条件(condition)为空则通过,否则失败 |
| assertNotSame(Object,object) | 如果期望(expected)和实际(actual)引用不同的内存对象对象则通过,否则失败 |
| assertNoteSame(String,Object,Object) | 如果期望(expected)和实际(actual)引用不同的内存对象对象则通过,否则失败 |
| assertSame(Object,Object) | 如果期望(expected)和实际(actual)引用相同的内存对象对象则通过,否则失败 |
| assertSame(String,Object,Object) | 如果期望(expected)和实际(actual)引用相同的内存对象对象则通过,否则失败 |
API示例:
//示例一:
public void testDemo1() throws UiObjectNotFoundException{
//自己声明一个布尔值为了测试断言函数的使用
boolean is=true;
//断言成功的例子
assertTrue(is);
//断言失败的例子
assertFalse(is);
}
//示例二: public void testDemo1() throws UiObjectNotFoundException{
int a = 100;
int b = 100;
Integer c=new Integer(100);
//断言成功的例子,值的比较
assertSame(a, b);
//断言失败的例子
assertNotSame(a, b);
//断言失败的例子,内存地址比较
assertSame(a, c);
//断言成功的例子
assertSame((Object)a, c);
}
4)
|
方法 |
说明 |
| fail() | 用例立即失败 |
| fail(String) | 用例立即失败,且抛出指定消息 |
| failNotEquals(String,Object,Object) | 用例立即失败,且抛出指定消息与期望、实际值不相等的消息 |
| failNotSame(String,String,String) | 用例立即失败,且抛出指定消息与期望、实际值不相等的消息 |
| failSame(String) | 用例立即失败,且抛出指定消息 |
- API示例:
public void testDemo1() throws UiObjectNotFoundException{
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressMenu();
UiDevice.getInstance().pressHome();
//用例失败,且抛出异常
fail("Failed");
}
三、使用断言函数的实例演示
//开始
protected void setUp() throws Exception{
super.setUp();
}
public void testDemo1() throws UiObjectNotFoundException{ //初始化场景
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressHome();
//打开文件管理
UiObject app=new UiObject(new UiSelector().description("应用"));
UiObject file=new UiObject(new UiSelector().text("文件管理器"));
app.clickAndWaitForNewWindow();
file.clickAndWaitForNewWindow();
//验证开启成功
String packageName=UiDevice.getInstance().getCurrentPackageName();
assertEquals("File open succes!","com.cyanogenmod.filemanager", packageName);
//检查目录名为test的目录
UiObject test=new UiObject(new UiSelector().text("test"));
UiScrollable listView=new UiScrollable(new UiSelector().className("android.widget.ListView"));
boolean FindResult=listView.scrollIntoView(test);
//如果有该目录则停止执行用例
if (FindResult==true){
fail("test目录已经存在");
}
//如果没有该目录则新建test目录
UiObject dos=new UiObject(new UiSelector().description("操作"));
dos.clickAndWaitForNewWindow();
UiObject newFile=new UiObject(new UiSelector().text("新建文件夹"));
newFile.clickAndWaitForNewWindow();
UiObject input=new UiObject(new UiSelector().className("android.widget.EditText"));
input.setText("test");
UiObject ok=new UiObject(new UiSelector().text("确定"));
ok.click();
//验证新建成功
boolean FindResult2=listView.scrollIntoView(test);
assertTrue("test目录创建成功",FindResult2);
}
//完成
protected void tearDown() throws Exception{
super.tearDown();
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressHome();
}
10.Android UiAutomator Junit 断言函数的使用的更多相关文章
- Android单元测试Junit (一)
1.在eclips中建立一个Android工程,具体信息如下: 2.配置单元测试环境,打开AndroidManifest.xml,具体代码如下所示: <?xml version="1. ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- Android uiautomator gradle build system
This will guide you through the steps to write your first uiautomator test using gradle as it build ...
- Android(java)学习笔记165:Android的Junit调试
编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一行一行检查自己的代码,为了解决这样的问题 ...
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
文章摘要: 本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后传递给c++层函数. (2)通过c++函数调用Android的java层函 ...
- C++学习笔记32 断言函数
首先,让我们来看看百度百科上"断言函数"定义说明: 1定义fr=aladdin#" class="nslog:1019" title="编辑 ...
- Python——assert(断言函数)
一.断言函数的作用 python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假.可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会 ...
- Android UiAutomator - CTS Frame
使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...
- Android(java)学习笔记108:Android的Junit调试
1. Android的Junit调试: 编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一 ...
随机推荐
- Python学习之web框架 Flask
一.通过PIP 安装Flask 1.1 Windows环境安装pip A.首先PIP进入官网(https://pypi.python.org/pypi/pip)下载gz包 B.对gz压缩包进行解压,解 ...
- PKI(Public Key Infrastucture)介绍
PKI(Public Key Infrastucture)介绍 根据Wikipedia PKI词条整理. PKI(Public Key Infrastucture)是一系列的规则.策略以及过程,可以用 ...
- 基于NABCD评论作品,及改进建议
组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶 刘佳瑞 公冶令鑫 杨磊 杨金铭 张宇 卢帝同 一.拉格朗日2018--<飞词> 1.1 NABCD分析 N(Need,需求) ...
- 王者荣耀交流协会--第3次Scrum会议
Scrum master:王玉玲 要求1:工作照片 要求2:时间跨度:2017年10月15号 6:00--6:24 共计24min要求3:地点:传媒西楼204,会议室要求4:立会内容:1.从昨日会 ...
- FIsherman丶Team
小组成员:郝恒杰,洪佳兴,张子祥 组长:郝恒杰 项目:Fisher Job(渔夫兼职) 简介: 我们的产品渔夫兼职是为了解决大学生兼职群体 的痛苦,他们需要一个好的渠道去找一个让自己满意的兼职,但是现 ...
- 《C》数据类型
- 四则运算3+psp0
题目要求: 1.程序可以判断用户的输入答案是否正确,如果错误,给出正确答案,如果正确,给出提示. 2.程序可以处理四种运算的混合算式. 3.要求两人合作分析,合作编程,单独撰写博客. 团队成员:张绍佳 ...
- mininet实验 连接floodlight控制器
参考博客一 参考博客二 事先准备-floodlight安装 Java安装方法及环境变量配置 执行ifconfig命令获取floodlight所在服务器的IP地址. 1.启动floodlight jav ...
- 读《it小小鸟》有感
我一直认为大学就是一个自由的舒适的学习环境,没有人可以干扰你限制你,以至于我到了大学之后只剩下了颓废的生活.每天上课玩手机,下课玩电脑,吃饭叫外卖,从不去锻炼,周末就熬夜通宵,状态越来越差,导致我逐渐 ...
- PAT---福尔摩斯约会时间
主要为字符串的处理,注意读懂题目意思. 设置输出域宽和填充字符的函数分别为setw(int n),setfill(char c);两个函数的头文件为#include<iomanip>; # ...