Java注解((Annotation)的使用方法是@注解名 ,能通過(guò)簡(jiǎn)單的詞語(yǔ)來(lái)實(shí)現(xiàn)一些功能。在junit中常用的注解有
@Test、@Ignore、@BeforeClass、@AfterClass、@Before、@After、@Runwith、@Parameters
以下是相關(guān)的介紹和使用說(shuō)明:
一.@Test
在junit3中,是通過(guò)對(duì)測(cè)試類(lèi)和測(cè)試方法的命名來(lái)確定是否是測(cè)試,且所有的測(cè)試類(lèi)必須繼承junit的測(cè)試基類(lèi)。在junit4中,定義一個(gè) 測(cè)試方法變得簡(jiǎn)單很多,只需要在方法前加上@Test行了。
注意:測(cè)試方法必須是public void,即公共、無(wú)返回?cái)?shù)據(jù)。可以拋出異常。
二.@Ignore
有時(shí)候我們想暫時(shí)不運(yùn)行某些測(cè)試方法測(cè)試類(lèi),可以在方法前加上這個(gè)注解。在運(yùn)行結(jié)果中,junit會(huì)統(tǒng)計(jì)忽略的用例數(shù),來(lái)提醒你。但是不建議經(jīng)常這么做,因?yàn)檫@樣的壞處時(shí),容易忘記去更新這些測(cè)試方法,導(dǎo)致代碼不夠干凈,用例遺漏。
三.@BeforeClass
當(dāng)我們運(yùn)行幾個(gè)有關(guān)聯(lián)的用例時(shí),可能會(huì)在數(shù)據(jù)準(zhǔn)備或其它前期準(zhǔn)備中執(zhí)行一些相同的命令,這個(gè)時(shí)候?yàn)榱俗尨a更清晰,更少冗余,可以將公用的部分提取出來(lái),放在一個(gè)方法里,并為這個(gè)方法注解@BeforeClass。意思是在測(cè)試類(lèi)里所有用例運(yùn)行之前,運(yùn)行一次這個(gè)方法。例如創(chuàng)建數(shù)據(jù)庫(kù)連接、讀取文件等。
注意:方法名可以任意,但必須是public static void,即公開(kāi)、靜態(tài)、無(wú)返回。這個(gè)方法只會(huì)運(yùn)行一次。
四.@AfterClass
跟@BeforeClass對(duì)應(yīng),在測(cè)試類(lèi)里所有用例運(yùn)行之后,運(yùn)行一次。用于處理一些測(cè)試后續(xù)工作,例如清理數(shù)據(jù),恢復(fù)現(xiàn)場(chǎng)。
注意:同樣必須是public static void,即公開(kāi)、靜態(tài)、無(wú)返回。這個(gè)方法只會(huì)運(yùn)行一次。
五.@Before
與@BeforeClass的區(qū)別在于,@Before不止運(yùn)行一次,它會(huì)在每個(gè)用例運(yùn)行之前都運(yùn)行一次。主要用于一些獨(dú)立于用例之間的準(zhǔn)備工作。比如兩個(gè)用例都需要讀取數(shù)據(jù)庫(kù)里的用戶A信息,但第一個(gè)用例會(huì)刪除這個(gè)用戶A,而第二個(gè)用例需要修改用戶A。那么可以用@BeforeClass創(chuàng)建數(shù)據(jù)庫(kù)連接。用@Before來(lái)插入一條用戶A信息。
注意:必須是public void,不能為static。不止運(yùn)行一次,根據(jù)用例數(shù)而定。
六.@After
與@Before對(duì)應(yīng)。
七.@Runwith
首先要分清幾個(gè)概念:測(cè)試方法、測(cè)試類(lèi)、測(cè)試集、測(cè)試運(yùn)行器。
其中測(cè)試方法是用@Test注解的一些函數(shù)。測(cè)試類(lèi)是包含一個(gè)或多個(gè)測(cè)試方法的一個(gè)**Test.java文件,測(cè)試集是一個(gè)suite,可能包含多個(gè)測(cè)試類(lèi)。測(cè)試運(yùn)行器則決定了用什么方式偏好去運(yùn)行這些測(cè)試集/類(lèi)/方法。
而@Runwith是放在測(cè)試類(lèi)名之前,用來(lái)確定這個(gè)類(lèi)怎么運(yùn)行的。也可以不標(biāo)注,會(huì)使用默認(rèn)運(yùn)行器。
常見(jiàn)的運(yùn)行器有:
1. @RunWith(Parameterized.class) 參數(shù)化運(yùn)行器,配合@Parameters使用junit的參數(shù)化功能
2.@RunWith(Suite.class)
@SuiteClasses({ATest.class,BTest.class,CTest.class})
測(cè)試集運(yùn)行器配合使用測(cè)試集功能
3.@RunWith(JUnit4.class)
junit4的默認(rèn)運(yùn)行器
4.@RunWith(JUnit38ClassRunner.class)
用于兼容junit3.8的運(yùn)行器
5.一些其它運(yùn)行器具備更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了spring的一些功能
八.@Parameters
用于使用參數(shù)化功能。