您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
JUnit簡(jiǎn)單使用教程
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/6/12 14:46:09 ] 推薦標(biāo)簽:單元測(cè)試 Junit 軟件測(cè)試工具

  JUnit簡(jiǎn)介
  JUnit是由 Erich Gamma和Kent Beck編寫的一個(gè)回歸測(cè)試框架(regression testing framework)。JUnit測(cè)試是程序員測(cè)試,即所謂白盒測(cè)試,因?yàn)槌绦騿T知道被測(cè)試的軟件如何(How)完成功能和完成什么樣(What)的功能。
  簡(jiǎn)單編寫單元測(cè)試實(shí)例
  public class JunitAnnotation {
  // execute before class
  @BeforeClass
  public static void beforeClass() {
  System.out.println("in before class");
  }
  // execute after class
  @AfterClass
  public static void afterClass() {
  System.out.println("in after class");
  }
  // execute before test
  @Before
  public void before() {
  System.out.println("in before");
  }
  // execute after test
  @After
  public void after() {
  System.out.println("in after");
  }
  // test case
  @Test
  public void test() {
  System.out.println("in test");
  }
  // test case ignore and will not execute
  @Ignore(“unimplemented”)
  public void ignoreTest() {
  System.out.println("in ignore test");
  }
  }
  JUnit常用注解介紹
  @Test:JUnit 3.x是通過對(duì)測(cè)試方法的命名(test+方法名)來確定是否是測(cè)試,且所有的測(cè)試類必須繼承TestCase。JUnit 4.x只需要在方法前加上@Test 可以定義一個(gè)測(cè)試方法。
  注意:測(cè)試方法必須是public void,即公共、無返回值的;可以拋出異常。
  @Ignore :該注解標(biāo)記的測(cè)試方法在測(cè)試中會(huì)被忽略。當(dāng)測(cè)試的方法還沒有實(shí)現(xiàn),或者測(cè)試的方法已經(jīng)過時(shí),或者在某種條件下才能測(cè)試該方法(比如需要一個(gè)數(shù)據(jù)庫(kù)連接,而在本地測(cè)試的時(shí)候,數(shù)據(jù)庫(kù)并沒有連接),那么使用該注解來標(biāo)記這個(gè)方法。同時(shí)可以為該注解傳遞一個(gè)String的參數(shù),表明為什么會(huì)忽略這個(gè)測(cè)試方法。比如:@lgnore(“該方法還沒有實(shí)現(xiàn)”),在執(zhí)行的時(shí)候,僅會(huì)報(bào)告該方法沒有實(shí)現(xiàn),而不會(huì)運(yùn)行測(cè)試方法。
  @BeforeClass:當(dāng)我們運(yùn)行幾個(gè)有關(guān)聯(lián)的用例時(shí),可能會(huì)在數(shù)據(jù)準(zhǔn)備或其它前期準(zhǔn)備中執(zhí)行一些相同的命令,這個(gè)時(shí)候?yàn)榱俗尨a更清晰,更少冗余,可以將公用的部分提取出來, 放在一個(gè)方法里,并為這個(gè)方法注解@BeforeClass。意思是在測(cè)試類里所有用例運(yùn)行之前,運(yùn)行一次這個(gè)方法。例如創(chuàng)建數(shù)據(jù)庫(kù)連接、讀取文件等。
  注意:方法名可以任意,但必須是public static void,即公開的、靜態(tài)的、無返回值的。這個(gè)方法只會(huì)運(yùn)行一次。
  @AfterClass:跟@BeforeClass對(duì)應(yīng),在測(cè)試類里所有用例運(yùn)行之后,運(yùn)行一次。用于處理一些測(cè)試后續(xù)工作,例如清理數(shù)據(jù),恢復(fù)現(xiàn)場(chǎng)。
  注意:同樣必須是public static void,即公開的、靜態(tài)的、無返回值的。這個(gè)方法只會(huì)運(yùn)行一次。
  @Before:使用了該注解的方法在每個(gè)測(cè)試方法執(zhí)行之前都要執(zhí)行一次。主要用于一些獨(dú)立于用例之間的準(zhǔn)備工作。比如兩個(gè)用例都需要讀取數(shù)據(jù)庫(kù)里的用戶A信息,但第一個(gè)用例會(huì)刪除這個(gè)用戶A,而第二個(gè)用例需要修改用戶A。那么可以用@BeforeClass創(chuàng)建數(shù)據(jù)庫(kù)連接。用@Before來插入一條用戶A信息。
  注意:必須是public void,不能為static。
  @After :使用了該注解的方法在每個(gè)測(cè)試方法執(zhí)行之后要執(zhí)行一次。
  @Runwith:即測(cè)試運(yùn)行器,放在測(cè)試類名之前,用來確定測(cè)試類怎么運(yùn)行的,當(dāng)不指定這個(gè)注解時(shí),使用默認(rèn)Runner來運(yùn)行測(cè)試代碼,即@RunWith(JUnit4.class)。
  常見的運(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):JUnit 4的默認(rèn)運(yùn)行器
  (4)@RunWith(JUnit38ClassRunner.class):用于兼容junit3.8的運(yùn)行器
  (5)一些其它運(yùn)行器具備更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了Spring的一些功能。
  @Parameters:用于JUnit的參數(shù)化功能,用來標(biāo)記準(zhǔn)備數(shù)據(jù)的方法。
  注意:該方法需要滿足一定的要求:
  (1)該方法必須為public static的
  (2)該方法返回值必須為java.util.Collection類型
  (3)該方法的名字不做要求
  (4)該方法沒有參數(shù)
  參數(shù)化測(cè)試
  為了保證單元測(cè)試的嚴(yán)謹(jǐn)性,我們模擬了不同的測(cè)試數(shù)據(jù)來測(cè)試方法的處理能力,為此我們編寫了大量的單元測(cè)試方法。而這些測(cè)試方法大同小異:代碼結(jié)構(gòu)都是相同的,不同的僅僅是測(cè)試數(shù)據(jù)和期望值。為了降低代碼的冗余,JUnit 4提供了參數(shù)化測(cè)試,即只寫一個(gè)測(cè)試方法,把這若干種情況作為參數(shù)傳遞進(jìn)去,一次性的完成測(cè)試。
  JUnit 4參數(shù)化測(cè)試的五個(gè)步驟:
  (1)為準(zhǔn)備使用參數(shù)化測(cè)試的測(cè)試類指定特殊的運(yùn)行器org.junit.runners.Parameterized。
  (2)為測(cè)試類聲明幾個(gè)變量,分別用于存放期望值和測(cè)試所用數(shù)據(jù)。
  (3)為測(cè)試類聲明一個(gè)帶有參數(shù)的公共構(gòu)造函數(shù),并在其中為第二個(gè)環(huán)節(jié)中聲明的幾個(gè)變量賦值。
  (4)為測(cè)試類聲明一個(gè)使用注解 org.junit.runners.Parameterized.Parameters飾的,返回值為java.util.Collection的公共靜態(tài)方法,并在此方法中初始化所有需要測(cè)試的參數(shù)對(duì)。
  (5)編寫測(cè)試方法,使用定義的變量作為參數(shù)進(jìn)行測(cè)試。

上一頁12下一頁
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd