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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章