這次學習的是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基本學習就結束了。