一、断言函数介绍

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 断言函数的使用的更多相关文章

  1. Android单元测试Junit (一)

    1.在eclips中建立一个Android工程,具体信息如下: 2.配置单元测试环境,打开AndroidManifest.xml,具体代码如下所示: <?xml version="1. ...

  2. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  3. Android uiautomator gradle build system

    This will guide you through the steps to write your first uiautomator test using gradle as it build ...

  4. Android(java)学习笔记165:Android的Junit调试

    编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一行一行检查自己的代码,为了解决这样的问题 ...

  5. cocos2d-x 通过JNI实现c/c++和Android的java层函数互调

    文章摘要: 本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后传递给c++层函数. (2)通过c++函数调用Android的java层函 ...

  6. C++学习笔记32 断言函数

    首先,让我们来看看百度百科上"断言函数"定义说明: 1定义fr=aladdin#" class="nslog:1019" title="编辑 ...

  7. Python——assert(断言函数)

    一.断言函数的作用 python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假.可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会 ...

  8. Android UiAutomator - CTS Frame

    使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...

  9. Android(java)学习笔记108:Android的Junit调试

    1. Android的Junit调试: 编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一 ...

随机推荐

  1. sklearn中的交叉验证(Cross-Validation)

    这个repo 用来记录一些python技巧.书籍.学习链接等,欢迎stargithub地址sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好.今天主要记录一下sk ...

  2. eBay:美国各州最受欢迎的产品品类

    雨果网从美国媒体<商业内幕>8月26日的报道中获悉,电商巨头eBay近日发布了美国各州最受欢迎的产品品类.包括:加州人青睐女性高端配件,而新泽西 州的男人喜欢古龙香水.相比这些华丽配饰而言 ...

  3. Python3【基础】-表达式与运算符

    一.什么是表达式? 1+2*3就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数.1+2*3计算的结果是7,计算结果可以存到一个变量中,即:res = 1 + 2 * 3. 所谓的表达式 ...

  4. php memcache 使用学习

    Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任 ...

  5. winfrom 界面编辑之疑难杂症

    设计器方便,但是也存在一些问题: 1.找不到控件,但确实存在——被隐藏或被右键显示于底层或颜色与父容器一致. 解决办法: 修改隐藏属性或右键显示于顶层. 2.灵活运用右键锁定控件与解锁控件. 3.注意 ...

  6. winform default模式下和英文模式下 修改问题

    1.修改控件大小.位置等属性在default模式下修改: 2.修改控件属性最好不要做鼠标拖动放大,拖动修改位置等,建议用属性栏中的数字来改变.

  7. Python:内建函数zip

    1.语法 zip([iterable,...]) [说明]:iterable——一个或多个迭代器 2.功能 zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个的元组,然后返回由这 ...

  8. HDU 5875 Function 优先队列+离线

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5875 Function Time Limit: 7000/3500 MS (Java/Others) ...

  9. c# Webservice技术整理

    因为平常项目中使用webservice比较少,然后就将本来不太熟悉的webservice给忘记掉了.所以再次整理如下: 百度搜索关键词 :c# webservice 1. 联接地址: http://w ...

  10. Java实现的词频统计——功能改进

    本次改进是在原有功能需求及代码基础上额外做的修改,保证了原有的基础需求之外添加了新需求的功能. 功能: 1. 小文件输入——从控制台由用户输入到文件中,再对文件进行统计: 2.支持命令行输入英文作品的 ...