Android JUnit進階

這次學習的是JUnit的註解和使用

先看一下上次代碼

public class CalculationTest {

    @Test
    public void add() {
        assertEquals(6, new Calculation().add(3, 3));
    }

    @Test
    public void sub() {
        assertEquals(1, new Calculation().sub(3,2));
    }

    @Test
    public void times() {
        assertEquals(6, new Calculation().times(3,2));
    }

    @Test
    public void division() {
        assertEquals(3, new Calculation().division(6,2));
    }
}

不知道,大家有沒有感覺代碼重複率高。雖然方法可以自動創建的。

每一個方法都需要創建Calculation 對象,在Android中一般都會在一個初始化的方法解決掉。

JUint提供了一寫註解幫助大家減少工資量。

先來看看JUnit註解

註解 描述
@Test public void method() 簡單說就是用這個註解的代表的是一個測試用例
@Before public void method() Before註釋表示,該方法必須在類中的每個測試之前執行,以便執行測試某些必要的先決條件。
@BeforeClass public static void method() BeforeClass註釋指出這是附着在靜態方法必須執行一次並在類的所有測試之前。發生這種情況時一般是測試計算共享配置方法(如連接到數據庫)。
@After public void method() After 註釋指示,該方法在執行每項測試後執行(如執行每一個測試後重置某些變量,刪除臨時變量等)
@AfterClass public static void method() 當需要執行所有的測試在JUnit測試用例類後執行,AfterClass註解可以使用以清理建立方法,(從數據庫如斷開連接)。注意:附有此批註(類似於BeforeClass)的方法必須定義爲靜態。
@Ignore public static void method() 當想暫時禁用特定的測試執行可以使用忽略註釋。每個被註解爲@Ignore的方法將不被執行。

注意:上面的每一個方法,都有對應的重載方法,可以在前面加一個String類型的參數,表示如果斷言失敗時的提示。

 修改後

public class CalculationTest {

    private static Calculation mCalculation;

    @BeforeClass
    public static void init() {
        mCalculation = new Calculation();
    }


    @Test
    public void add() {
        assertEquals(6, mCalculation.add(3, 3));
    }

    @Test
    public void sub() {
        assertEquals(1, mCalculation.sub(3, 2));
    }

    @Test
    public void times() {
        assertEquals(6, mCalculation.times(3, 2));
    }

    @Test
    public void division() {
        assertEquals(3, new Calculation().division(6, 2));
    }
}

驗證所有註解

public class CalculationTest {

    private static Calculation mCalculation;

    // 測試類第一次執行的時候執行
    @BeforeClass
    public static void init() {
        System.out.println("BeforeClass");
    }

    // 每個測試方法執行的時候,先執行這個方法
    @Before
    public void before() {
        System.out.println("每次執行test方法前,先調用我");
    }

    // 每次執行測試方法後,再執行這個方法
    @After
    public void after() {
        System.out.println("每次執行test方法後,先調用我");
    }

    // 測試方法
    @Test
    public void add() {
        System.out.println("add");
    }

    // 測試方法
    @Test
    public void sub() {
        System.out.println("sub");
    }

    // 測試方法
    @Test
    public void times() {
        System.out.println("times");
    }

    // 測試方法
    @Test
    public void division() {
        System.out.println("division");
    }

    // 每一個類執行到最後時候,會執行這個方法,再結束。
    @AfterClass
    public static void afterClass() {
        System.out.println("afterClass");
    }

    // 會被忽略的方法
    @Ignore
    public void Ignore() {
        System.out.println("Ignore");
    }
}

查看結果

二、斷言

看看JUnit斷言

斷言 描述
void assertEquals([String message], expected value, actual value) 斷言兩個值相等。值可能是類型有 int, short, long, byte, char or java.lang.Object. 第一個參數是一個可選的字符串消息
void assertTrue([String message], boolean condition) 斷言一個條件爲真
void assertFalse([String message],boolean condition) 斷言一個條件爲假
void assertNotNull([String message], java.lang.Object object) 斷言一個對象不爲空(null)
void assertNull([String message], java.lang.Object object) 斷言一個對象爲空(null)
void assertSame([String message], java.lang.Object expected, java.lang.Object actual) 斷言,兩個對象引用相同的對象
void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 斷言,兩個對象不是引用同一個對象
void assertArrayEquals([String message], expectedArray, resultArray) 斷言預期數組和結果數組相等。數組的類型可能是 int, long, short, char, byte or java.lang.Object.
fail() 讓測試方法失敗

執行順序:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

@Test 中指定 expected 的異常只是本測試方法的異常,如果調用中的方法拋異常還是會打印log出來

@RunWith(JUnit4.class)
public class Test {
    @org.junit.Test(expected = Exception.class)
    public void test() {
        Test test = new Test();
        test = null;
        test.test();
    }


}

JUnit基本學習就結束了。

發佈了34 篇原創文章 · 獲贊 30 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章