一、断言函数介绍

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();
}

最新文章

  1. FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!
  2. 再谈:jquery编写插件的方法
  3. Jquery 实现input回车时跳转到下一个input元素
  4. php操作mysql数据库的基本类
  5. 阿里云数加平台——BI报表使用概述和总结
  6. bcov进行覆盖率统计
  7. Python之路,Day13-----暂无正在更新中
  8. pkill killall kill pidof
  9. nyoj 228 士兵杀敌(五)
  10. linux下postgres的安装
  11. [转]:Delphi XE中泛型数组的使用范例
  12. python- do_excel
  13. [廖雪峰] Git 分支管理(2):Bug 分支
  14. 日志收集-Flume-ng-mongodb-sink
  15. 树莓派(Raspberry Pi)USB无线网卡自动连接,二代B
  16. nginx 配置说明及优化
  17. jQuery和Prototype的兼容性和冲突的五种解决方法
  18. powerdesigner与mysql数据库的连接
  19. python 文件的读取&更新
  20. 使用PorterDuffXfermode画出刮刮奖效果p146-p148

热门文章

  1. flask验证登录学习过程(1)---准备
  2. 【IdentityServer4文档】- 使用密码保护 API
  3. python、Eclipse、pydev环境配置
  4. lintcode-501-迷你推特
  5. FreeMarker(XML模板)导出word
  6. Linux下objdump查看C程序编译后的汇编代码
  7. django里的http协议
  8. scss在ide的命令参数
  9. 在python3中使用urllib.request编写简单的网络爬虫
  10. ARP(Adress Resolution Protocol): 地址解析协议