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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM