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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值