您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
JUnit 4与TestNG
作者:网络转载 发布时间:[ 2015/11/13 14:02:41 ] 推荐标签:软件测试工具 单元测试工具

  这两天在看一本书《Java测试新技术TestNG和高级概念》,作者是 TestNG 的创始人,了解了不少关于 TestNG 的知识,看了一篇文章基本把这本书的几个观点都体现了,那我直接翻译原文好,省得自己总结。这两天要不是等原作者的授权的话可能本文发布了,没经过人家许可翻译人家文章应该的确也不是什么光彩的事情,等等无妨。原文链接JUnit 4 Vs TestNG – Comparison,非常感谢作者写出好文,不过mkyong先生写了的确好多文章,经常搜个文章 google 第一篇总是他的。如果有翻译问题,请拍砖。
  ————————————————————————————————————————————
  Junit 4 和 TestNG 都是 Java 方面非常流行的单元测试框架。在功能上两个框架都非常类似。到底哪个比较好?在Java项目中我们应该选择哪个框架?
  下图将会对Junit 4 和 TestNG 做个功能特征的对比。

  注解支持
  Junit 4 和 TestNG 在注解方面的实现非常相似。

  JUnit 4 和 TestNG 之间注解方面的区别主要有以下几点:
  在Junit 4 中,如果我们需要在方法前面使用@BeforeClass和@AfterClass,那么该测试方法则必须是静态方法。TestNG 在方法定义部分则更加的灵活,它不需要类似的约束。
  3个附加的setUp/tearDown级别:套件和分组(@Before/AfterSuite, @Before/AfterTest, @Before/AfterGroup)。想了解详细的请看这里
  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,这样的名字非常好理解了。
  异常测试
  异常测试的意思是在单元测试中应该抛出什么异常是合理的,这个特性在两个框架都已经实现。
  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;
  }
  忽略测试
  忽略测试意思是在单元测试哪些是可以被忽略的,这个特性在两个框架都已经实现。
  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");
  }
  时间测试
  时间测试意思是如果一个单元测试运行的时间超过了一个指定的毫秒数,那么测试将终止并且标记为失败的测试,这个特性在两个框架都已经实现。
  JUnit 4
  @Test(timeout = 1000)
  public void infinity() {
  while (true);
  }
  TestNG
  @Test(timeOut = 1000)
  public void infinity() {
  while (true);
  }
  套件测试
  套件测试是把几个单元测试组合成一个模块,然后运行,这个特性两个框架均已实现。然而却是用了两个不同的方式来实现的。
  JUnit 4
  @RunWith 和 @Suite注解被用于执行套件测试。下面的代码是所展示的是在JunitTest5被执行之后需要JunitTest1 和 JunitTest2也一起执行。所有的声明需要在类内部完成。
  @RunWith(Suite.class)
  @Suite.SuiteClasses({
  JunitTest1.class,
  JunitTest2.class
  })
  public class JunitTest5 {
  }
  TestNG
  执行套件测试是使用XML文件配置的方式来做。下面的 XML 的文件可以使得TestNGTest1和TestNGTest2一起执行。

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd