前面環境搭建好了,我們來寫一個JUnit的單元測試,然後分析裡面代碼,引出一些JUnit的基本概念。
1.環境準備
建立一個overview包,然後建立一個Test01.java檔案,寫入下面代碼内容。
package overview;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class Test01 {
@Test
public void test1() {
assertEquals(5, "hello".length());
}
}
儲存之後,JUnit自動添加到了build path依賴。
這個可以看出使用Junit的版本号。
2.代碼解釋
@Test
public void test1() {
assertEquals(5, "hello".length());
}
在Junit中,任何測試方法如果想要通過JUnit方式運作,這些方法前面一行需要添加@Test注解。添加了這個注解,就是告訴JUnit架構,這個方法是一個JUnit測試用例,不加就是Java中普通的方法。在添加這個注解過程,會提示要導入JUnit的Test包,是以導包語句中有 import org.junit.Test;
這個地方有很多知識點,我們一個一個來講。
2.1 JUnit方法隻能使用public修飾
關于這點,我們把public 改成private,然後運作下。
如果是private修飾,會報Java異常,沒有找到比對的測試。
2.2 JUnit方法不能有傳回值。
把Junit方法換成下面代碼,嘗試執行下run as junit。
@Test
public int test1() {
assertEquals(5, "hello".length());
return 1 + 1;
}
得到和2.1中相同的異常,是以記住Junit測試方法中沒有傳回值,必須是void。
2.3 早期JUnit方法名稱必須是test開頭,現在可以是任意。
這裡說一下,為什麼我寫方法名稱是test1(), 這個是個人習慣。因為早期JUnit版本就是要求方法名稱必須小寫的test開頭,後來最新和JUnit4和JUnit5就沒有這個要求,方法名稱可以随便取,例如下面的例子。
@Test
public void verifyStringLength() {
assertEquals(5, "hello".length());
}
上面方法名稱為verifyStringLength,驗證字元長度,也是可以運作
2.4 斷言
在JUnit中,關于斷言,有很豐富的封裝好的斷言,判斷方法供我們使用,這也是作為Java程式員使用JUnit寫單元測試的一個理由。既然有輪子,為什麼還要去造輪子呢。
assertEquals(5, "hello".length());
這個斷言方法是判斷兩個對象相等,第一個參數是期待結果,第二個參數是實際結果。
關于想了解更多斷言,在Junit中斷言方法一般是assert開頭,然後你根據代碼提示,選擇你需要的斷言方法
2.5 更多注解
上面我說了一個@Test注解,如果要非常熟練使用JUnit,我們還需要學習以下常見的注解。
@Test
@Before
@After
@BeforeClass
@AfterClass
@Ignore
@Test(expected = Exception.class)
@Test(timeout=100)
這些注解,我們後面文章會逐一介紹到。