有幾點(diǎn)需要關(guān)注:
1
——
一個(gè)測試案例必須要繼承自
TestCase
;
2
——
JUnit
是通過反射機(jī)制來執(zhí)行每一個(gè)
test
方法,它通過匹配方法名
testXXX
來確定一個(gè)方法為需要執(zhí)行的測試
Case
。
3
——
使用一個(gè)或幾個(gè)
assertXXX
方法來驗(yàn)證我們的情況。
?
好,現(xiàn)在使用
JUnit 4.x
來實(shí)現(xiàn)相同的測試,從中,我們就能看到一些新的東西:
首先關(guān)注以下幾點(diǎn):
1
——我們的測試類并沒有
extends TestCase
類了,
2
——我們的測試方法并沒有以
test
開頭,而是使用了
@Test
標(biāo)簽來標(biāo)記該方法是一個(gè)需要測試的方法。
?
下面的圖標(biāo)示了用
JUnit 4.x
我們需要做的事情:
1
——我們需要引進(jìn)
org.junit.Test
標(biāo)簽,還有很多標(biāo)簽都在
org.junit.*
包里面。
2
——引進(jìn)
static assertEquals
靜態(tài)方法,引入靜態(tài)方法也是
Java 5
的一個(gè)新的特性,避免了使用過長的應(yīng)用方法名。
3
——引進(jìn)
JUnit4TestAdapter
,這是一個(gè)和老版本
JUnit
工具合用的適配器。
4
——使用
@Test
標(biāo)簽來申明一個(gè)方法需要測試。
5
——直接使用需要的
assert
方法
6
——使用一個(gè)
main
方法來用
JUnit4TestAdapter
在老的
Junit runner
上運(yùn)行新的測試。
?
總結(jié)一下:
l????????
使用一個(gè)普通的類,而不必繼承自
Junit.framework.TestCase
。
l????????
使用
@Test
標(biāo)簽來標(biāo)記一個(gè)方法是一個(gè)測試方法。
l????????
使用一個(gè)
assert
方法。在新版本的
Junit
中,
assert
方法和老方法沒有什么區(qū)別。并且使用靜態(tài)方法引入,(
static import
)特性來簡化方法的使用。
l????????
使用
JUnit4TestAdapter
來運(yùn)行測試。
?
Set up
和
tear down
新版本的
JUnit
提供了兩個(gè)新的標(biāo)簽來使用
set up
和
tear down
:
@Before
:使用了該標(biāo)記的方法在每個(gè)測試方法執(zhí)行之前都要執(zhí)行一次。
@After
:使用了該標(biāo)記的方法在每個(gè)測試方法執(zhí)行之后要執(zhí)行一次。
?
這里有個(gè)測試的例子:
如果我們?cè)谒械姆椒ㄖ卸继砑右粋€(gè)
System.out.println()
方法,執(zhí)行的結(jié)果會(huì)像這樣:
?????? runOnceBeforeAllTests()
被調(diào)用;
bookNotAvailableInLibrary()
被調(diào)用;
bookAvailableInCentralLibrary
()被調(diào)用;
runAfterAllTests
()被調(diào)用,
而如果我們還有一個(gè)
@Before beforeTest()
方法和一個(gè)
@After afterTest()
方法,那么執(zhí)行的結(jié)果會(huì)是這樣:
?????? runOnceBeforeAllTests()
被調(diào)用;
?????? beforeTest()
被調(diào)用;
bookNotAvailableInLibrary()
被調(diào)用;
afterTest
()被調(diào)用;
beforeTest()
被調(diào)用;
bookAvailableInCentralLibrary
()被調(diào)用;
afterTest
()被調(diào)用;
runAfterAllTests
()被調(diào)用,
從這里我們就可以看出兩者的區(qū)別了。
另外一點(diǎn),
@Before
和
@After
標(biāo)示的方法只能各有一個(gè)。
?
錯(cuò)誤處理:
在
JUnit4.0
之前,對(duì)錯(cuò)誤的測試,我們只能通過
fail
來產(chǎn)生一個(gè)錯(cuò)誤,并在
try
塊里面
assertTrue
(
true
)來測試。現(xiàn)在,通過
@Test
標(biāo)簽中的
expected
屬性,就可以更優(yōu)雅的測試錯(cuò)誤了:
在這段代碼中,我們?yōu)?/span>
@Test
標(biāo)簽添加了
expected
屬性,并提供了一個(gè)
BookNotAvailableException
,那么在這段測試中,如果代碼沒有拋出這個(gè)類型的錯(cuò)誤,測試就失敗了,如果正確拋出該類型錯(cuò)誤,測試通過。
?
其他的標(biāo)簽:
@ignore
標(biāo)簽:
該標(biāo)簽標(biāo)記的測試方法在測試中會(huì)被忽略。當(dāng)測試的方法還沒有實(shí)現(xiàn),或者測試的方法已經(jīng)過時(shí),或者在某種條件下才能測試該方法(比如需要一個(gè)數(shù)據(jù)庫聯(lián)接,而在本地測試的時(shí)候,數(shù)據(jù)庫并沒有連接),那么使用該標(biāo)簽來標(biāo)示這個(gè)方法。同時(shí),你可以為該標(biāo)簽傳遞一個(gè)
String
的參數(shù),來表明為什么會(huì)忽略這個(gè)測試方法。比如:
@lgnore(“
該方法還沒有實(shí)現(xiàn)
”)
,在執(zhí)行的時(shí)候,僅會(huì)報(bào)告該方法沒有實(shí)現(xiàn),而不會(huì)運(yùn)行測試方法。
?
@Test(timeout=xxx):
該標(biāo)簽傳入了一個(gè)時(shí)間(毫秒)給測試方法,
如果測試方法在制定的時(shí)間之內(nèi)沒有運(yùn)行完,則測試也失敗。
?
這篇文章就到這里,其實(shí)
JUnit4.x
里面還有很多標(biāo)簽的用法,將在明天的
blog
中繼續(xù)。
?(注:本文作者,EasyJF開源團(tuán)隊(duì) stef_wu,轉(zhuǎn)載請(qǐng)保留作者聲明!)
posted on 2006-11-19 19:27
簡易java框架 閱讀(2510)
評(píng)論(1) 編輯 收藏