JUnit4入門
什么是單元測試?
寫了個類,要給別人用,會不會有Bug?怎么辦?測試
用main方法測試好不好?不好
1.不能一起運行
2.大多數情況下需要人為的觀察輸出是否正確
為什么要進行單元測試?
重用測試,應付將來的實現的變化
提高士氣,明確知道我的東西是沒問題的
JUnit4 HelloWorld
1.new Project
2.建立類
public class T {
y){
}
3.建立testCase
創建一個新的Junit 4 Test Case,選擇junit4,選擇要測試的類,next
勾上要測試的方法,點finish
會提示是否要導入junit4的jar包,如果想使用MyEclipse自帶的,點ok即可
之后會生成如下代碼:
import static org.junit.Assert.*;
import org.junit.Test;
public class TTest {
yet implemented"); // TODO
}
靜態導入了Assert類的所有靜態斷言方法,fail()只是其中一種
修改下自動生成的testAdd()方法:
5);
assertEquals(期望得到的值,實際的值),此時我們希望測試T類的add()方法, 3 + 5
是否等于8
之后,右鍵,Run as ,JUnit Test運行測試
左邊的小窗口為JUnit,會看到一個綠色的“條”,則表示測試通過,這個方法沒問題
現在我們修改testAdd()方法:
還可以寫多個斷言一起進行測試,其中每個斷言方法,
都重載了一個(String message) 代表如果出錯了,會提示什么消息
@Test
T().add(3, 5);
----------------------------------------
一種新的測試方法:assertThat()
使用它時,需要下載jar包:hamcrest-all-1.3.0RC2.jar
如果用MyEclipse自帶的JUnit4的jar包,會產生沖突,
測試時,會報一個Security的異常,ClassLoader() 原因是加載類的加載器不同
所以單獨下載JUnit4的jar包并導入: junit-4.10.jar
@Test
T().add(3, 5);
z);
is(8)); //測試這個對象是否等于8
allOf(greaterThan(5),lessThan(10))); //判斷z 大于5并且小于10
具體方法信息查看API http://www.jmock.org/javadoc/2.3.0/org/hamcrest/Matchers.html
---------------------------------------------
Failure 和 Error區別:Failure是測試失敗,Error是指程序本身出錯
比如調用 assertTrue("z大于8", z
>= 8 ) 方法,如果不是 z>=8 時,會顯示Failure
如果 在testAdd() 方法內,寫 int i = 1/0;
此時會顯示Error
執行多個測試方法:
自定義測試方法:@Test
執行JUnit Test時,會一起測試這個類中所有方法
@Test的屬性:
@Test(expected=java.lang.ArithmeticException.class) //希望他拋出異常
void testDevide(){
//除數為0
此時測試會通過
@Test(timeout = 100) //在100毫秒內運行結束這個方法
用來測試一些算法等,如果100毫秒內完成了這個方法的執行,則通過
@Ignore:被忽略的測試方法,在方法前寫上它,執行測試時,標志這個方法不被測試
@Before:每一個測試方法之前運行
@After:每一個測試方法之后運行
----------------------------------
@BeforeClass:所有測試開始之前運行
@AfterClass:所有測試結束之后運行
@BeforeClass 和 @AfterClass必須為static:
類初始化之前就已經執行了,他們的作用:配置環境,打開連接,關閉、釋放連接等