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