一、環境搭建: 1、需要用的包: JUnit4.7:http://files.cnblogs.com/files/ShawnYang/junit4.7.zip hamcrest-1.2:http://files.cnblogs.com/files/ShawnYang/hamcrest-1.2.zip ...
一、環境搭建:
1、需要用的包:
JUnit4.7:http://files.cnblogs.com/files/ShawnYang/junit4.7.zip
hamcrest-1.2:http://files.cnblogs.com/files/ShawnYang/hamcrest-1.2.zip
需要導入的jar包:
2、需要註意的是,將JUnit包加入項目中之後,就不要使用eclipse自帶的JUnit Library了。如果使用eclispe自帶的JUnit包,又加上從外部引入的 hamcrest 包,那麼在調試 test case 的時候會出現 classloader 相關的異常。所以要統一從外部引入。
二、什麼是單元測試
寫了個類,要給別人用,會不會有bug?怎麼辦?測試一下。
用 main 方法測試好不好?不好!
1、不能一起運行,也就是不能一次測試多個方法!
JUnit可以選中類測試所有方法,也可以選中方法,測試單個方法,要靈活一些。
2、大多數情況下需要人為的觀察輸出確定是否正確。
JUnit 只需要滑鼠選中整個類的測試方法 run as JUnit Test,如果bar為綠就說明整個類的所有方法測試通過了。
三、為什麼要進行單元測試
重用測試,應付將來的實現的變化;
提高自信心,明確知道自己的東西是沒問題的。
JUnit4 HelloWorld
1、new project
2、建立類
3、建立 testcase
四、放棄舊的斷言,使用 hamcrest 斷言
1、assertThat
2、使用 hamcrest 的匹配方法
a) 更自然
3、示例
a) assertThat(n,allOf(greaterThan(1),lessThan(15)));
assertThat(n,anyOf(greaterThan(16),lessThan(8)));
assertThat(n,anything());
assertThat(str,is("shawn"));
assertThat(str,not("shawn"));
b) assertThat(str,containsString("shawn"));
assertThat(str,endWith("shawn"));
assertThat(str,startWith("shawn"));
assertThat(n,equalTo(nExpected));
assertThat(str,equalToIgnoringCase("developerWorks"));
assertThat(str,equalToIgnoringWhiteSpace("developerWorks"));
c) assertThat(d,closeTo(3.0,0.3));
assertThat(d,greaterThan(3.0));
assertThat(d,lessThan(10.0));
assertThat(d,greaterThanOrEqualTo(5.0));
assertThat(d,lessThanOrEqualTo(16.0));
d) assertThat(map,hasEntry("shawn","shawn"));
assertThat(iterabel,hasItem("shawn"));
assertThat(map,hasKey("shawn"));
assertThat(map,hasValue("shawn"));
五、Failure和Error
1、Failure是指測試失敗
2、Error是指測試程式本身出錯
註意:有Error 就不會再去找Failure了。
六、JUnit4 Annotation
1、@Test:測試方法
a) (expected=XXException.class)
b) (timeout=xxx)
2、@Ignore:被忽略的測試方法
3、@Before:每一個測試方法之前運行
4、@After:每一個測試方法之後運行
5、@BeforeClass:所有測試開始之前運行
6、@AfterClass:所有測試結束之後運行
運行多個測試
右鍵點擊測試類:run as JUnit Test
最後註意
1、遵守約定,比如
a) 類放在test包中;
b) 類名用 XXXTest結尾;
c) 方法用 testXXXMehtod 命名。