Android單元測試-Junit

基本用法實(shí)際操作

CSDN同步發(fā)布
1、新建測試類

public class Caculation {
    public double sum(double numA, double numB) {
        return numA + numB;
    }

    public double multiply(double numA, double numB) {
        return numA * numB;
    }
}

2、類名右鍵--Go To--Test,生成測試類
項目中androidTest文件夾里的就是UI測試代碼,而test文件夾是Junit部分的單元測試代碼。



3、編輯測試類,右鍵類名或者方法可運(yùn)行得出測試結(jié)果

public class CaculationTest {
    private Caculation mCaculation;

    @Before
    public void setUp() throws Exception {
        mCaculation = new Caculation();
    }

    @Test
    public void sum() throws Exception {
        assertEquals(2,mCaculation.sum(1,1),0);
    }

    @Test
    public void multiply() throws Exception {
        assertEquals(10,mCaculation.multiply(2,5),0);
    }

}

Junit斷言及注解說明

斷言

  • assertArrayEquals(expecteds, actuals) 查看兩個數(shù)組是否相等。
  • assertEquals(expected, actual) 查看兩個對象是否相等。類似于字符串比較使用的equals()方法
  • assertNotEquals(first, second) 查看兩個對象是否不相等。
  • assertNull(object) 查看對象是否為空。
  • assertNotNull(object) 查看對象是否不為空。
  • assertSame(expected, actual) 查看兩個對象的引用是否相等。類似于使用“==”比較兩個對象
  • assertNotSame(unexpected, actual) 查看兩個對象的引用是否不相等。類似于使用“!=”比較兩個對象
  • assertTrue(condition) 查看運(yùn)行結(jié)果是否為true。
  • assertFalse(condition) 查看運(yùn)行結(jié)果是否為false。
  • assertThat(actual, matcher) 查看實(shí)際值是否滿足指定的條件
  • fail() 讓測試失敗

注意:上面的方法,都有一個重載的方法,可以在前面加一個String類型的參數(shù),表示如果驗(yàn)證失敗的話,將用這個字符串作為失敗的結(jié)果報告。
比如:
assertEquals("Current user Id should be 1", 1, currentUser.id());

注解

  • @Before 初始化方法
  • @After 釋放資源
  • @Test 測試方法,在這里可以測試期望異常和超時時間
  • @Ignore 忽略的測試方法
  • @BeforeClass 針對所有測試,只執(zhí)行一次,且必須為static void
  • @AfterClass 針對所有測試,只執(zhí)行一次,且必須為static void
  • @RunWith 指定測試類使用某個運(yùn)行器
  • @Parameters 指定測試類的測試數(shù)據(jù)集合
  • @Rule 允許靈活添加或重新定義測試類中的每個測試方法的行為
  • @FixMethodOrder 指定測試方法的執(zhí)行順序

一個測試類單元測試的執(zhí)行順序?yàn)椋?br> @BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一個測試方法的調(diào)用順序?yàn)椋?br> @Before –> @Test –> @After

打包測試

同樣,如果一個項目中有很多個測試用例,如果一個個測試也很麻煩,因此打包測試就是一次性測試完成包中含有的所有測試用例。

@RunWith(Suite.class)  
@Suite.SuiteClasses({ AssertTests.class, CaculationTest.class, DemoTest.class })  
public class AllCaseTest {  
  
}  

需要向@RunWith注解傳遞一個參數(shù)Suite.class 。同時,我們還需要另外一個注解@Suite.SuiteClasses,來表明這個類是一個打包測試類。并將需要打包的類作為參數(shù)傳遞給該注解就可以了。至于AllCaseTest隨便起一個類名,內(nèi)容為空既可。運(yùn)行AllCaseTest類即可完成打包測試

限時測試

在@Test后加入timeout參數(shù)

 @Test(timeout=1000)
    public void multiply() throws Exception {
        assertEquals(10,mCaculation.multiply(2,5),0);
    }

直接用@Rule設(shè)置該類的timeout參數(shù)

@Rule
    public Timeout globalTimeout = new Timeout(10000); // 10 seconds max per method tested  

驗(yàn)證方法會拋出某些異常

public class Calculator {

    // Omit testAdd() and testMultiply() for brevity

    public double divide(double divident, double dividor) {
        if (dividor == 0) throw new IllegalArgumentException("Dividor cannot be 0");

        return divident / dividor;
    }}
public class CalculatorTest {
    Calculator mCalculator;

    @Before
    public void setup() {
        mCalculator = new Calculator();
    }

    // Omit testAdd() and testMultiply() for brevity

    @Test(expected = IllegalArgumentException.class)
    public void test() {
        mCalculator.divide(4, 0);
    }

}

@Test(expected = IllegalArgumentException.class)表示驗(yàn)證這個測試方法將拋出IllegalArgumentException異常,如果沒有拋出的話,則測試失敗。

參考文章

Junit使用教程(三)
Android單元測試(三):JUnit單元測試框架的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在《初入Android單元測試》中我們對Android單元測試有了一個大概的了解,今天我們就直接進(jìn)入項目測試環(huán)節(jié)。...
    最最最最醉人閱讀 1,043評論 0 8
  • Android 開發(fā) 單元測試 (套件,參數(shù)化,超時) 參考文章: http://www.yiibai.com/j...
    TiaoPi閱讀 1,072評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評論 6 342
  • 首先要聲明一下我是個語文不及格的人,所以寫下的文字可能只是最平常的文字,請閱讀的人包容一下我詞匯量小的弱點(diǎn),感興趣...
    掃雞毛閱讀 239評論 0 1

友情鏈接更多精彩內(nèi)容