您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
JUnit 4與TestNG
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/11/13 14:02:41 ] 推薦標(biāo)簽:軟件測(cè)試工具 單元測(cè)試工具

  這兩天在看一本書《Java測(cè)試新技術(shù)TestNG和高級(jí)概念》,作者是 TestNG 的創(chuàng)始人,了解了不少關(guān)于 TestNG 的知識(shí),看了一篇文章基本把這本書的幾個(gè)觀點(diǎn)都體現(xiàn)了,那我直接翻譯原文好,省得自己總結(jié)。這兩天要不是等原作者的授權(quán)的話可能本文發(fā)布了,沒經(jīng)過(guò)人家許可翻譯人家文章應(yīng)該的確也不是什么光彩的事情,等等無(wú)妨。原文鏈接JUnit 4 Vs TestNG – Comparison,非常感謝作者寫出好文,不過(guò)mkyong先生寫了的確好多文章,經(jīng)常搜個(gè)文章 google 第一篇總是他的。如果有翻譯問題,請(qǐng)拍磚。
  ————————————————————————————————————————————
  Junit 4 和 TestNG 都是 Java 方面非常流行的單元測(cè)試框架。在功能上兩個(gè)框架都非常類似。到底哪個(gè)比較好?在Java項(xiàng)目中我們應(yīng)該選擇哪個(gè)框架?
  下圖將會(huì)對(duì)Junit 4 和 TestNG 做個(gè)功能特征的對(duì)比。

  注解支持
  Junit 4 和 TestNG 在注解方面的實(shí)現(xiàn)非常相似。

  JUnit 4 和 TestNG 之間注解方面的區(qū)別主要有以下幾點(diǎn):
  在Junit 4 中,如果我們需要在方法前面使用@BeforeClass和@AfterClass,那么該測(cè)試方法則必須是靜態(tài)方法。TestNG 在方法定義部分則更加的靈活,它不需要類似的約束。
  3個(gè)附加的setUp/tearDown級(jí)別:套件和分組(@Before/AfterSuite, @Before/AfterTest, @Before/AfterGroup)。想了解詳細(xì)的請(qǐng)看這里
  JUnit 4
  @BeforeClass
  public static void oneTimeSetUp() {
  // one-time initialization code
  System.out.println("@BeforeClass - oneTimeSetUp");
  }
  TestNG
  @BeforeClass
  public void oneTimeSetUp() {
  // one-time initialization code
  System.out.println("@BeforeClass - oneTimeSetUp");
  }
  在Junit 4中,注解的命名是比較令人困惑的,例如 Before, After and Expected,我們不是很確切的能理解在方法前面有Before和After這樣的注解是做什么的,同樣Expected也如此。TestNG在這方面做的好很多,注解使用了BeforeMethod,AfterMethod和ExpectedException,這樣的名字非常好理解了。
  異常測(cè)試
  異常測(cè)試的意思是在單元測(cè)試中應(yīng)該拋出什么異常是合理的,這個(gè)特性在兩個(gè)框架都已經(jīng)實(shí)現(xiàn)。
  JUnit 4
  @Test(expected = ArithmeticException.class)
  public void divisionWithException() {
  int i = 1/0;
  }
  TestNG
  @Test(expectedExceptions = ArithmeticException.class)
  public void divisionWithException() {
  int i = 1/0;
  }
  忽略測(cè)試
  忽略測(cè)試意思是在單元測(cè)試哪些是可以被忽略的,這個(gè)特性在兩個(gè)框架都已經(jīng)實(shí)現(xiàn)。
  JUnit 4
  @Ignore("Not Ready to Run")
  @Test
  public void divisionWithException() {
  System.out.println("Method is not ready yet");
  }
  TestNG
  @Test(enabled=false)
  public void divisionWithException() {
  System.out.println("Method is not ready yet");
  }
  時(shí)間測(cè)試
  時(shí)間測(cè)試意思是如果一個(gè)單元測(cè)試運(yùn)行的時(shí)間超過(guò)了一個(gè)指定的毫秒數(shù),那么測(cè)試將終止并且標(biāo)記為失敗的測(cè)試,這個(gè)特性在兩個(gè)框架都已經(jīng)實(shí)現(xiàn)。
  JUnit 4
  @Test(timeout = 1000)
  public void infinity() {
  while (true);
  }
  TestNG
  @Test(timeOut = 1000)
  public void infinity() {
  while (true);
  }
  套件測(cè)試
  套件測(cè)試是把幾個(gè)單元測(cè)試組合成一個(gè)模塊,然后運(yùn)行,這個(gè)特性兩個(gè)框架均已實(shí)現(xiàn)。然而卻是用了兩個(gè)不同的方式來(lái)實(shí)現(xiàn)的。
  JUnit 4
  @RunWith 和 @Suite注解被用于執(zhí)行套件測(cè)試。下面的代碼是所展示的是在JunitTest5被執(zhí)行之后需要JunitTest1 和 JunitTest2也一起執(zhí)行。所有的聲明需要在類內(nèi)部完成。
  @RunWith(Suite.class)
  @Suite.SuiteClasses({
  JunitTest1.class,
  JunitTest2.class
  })
  public class JunitTest5 {
  }
  TestNG
  執(zhí)行套件測(cè)試是使用XML文件配置的方式來(lái)做。下面的 XML 的文件可以使得TestNGTest1和TestNGTest2一起執(zhí)行。

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