快速业务通道

追求代码质量 - JUnit 4与TestNG的对比 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
多的灵活性

在清单 2 中,您可以看到同一个 测试项目。不过这次是用 TestNG 实现的 。这里的代码跟清单 1 中的测试代码有个微妙的差别。发现了吗?

清单 2. 一个 TestNG 测试用例

package test.com.acme.dona.dep; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import org.testng.annotations.BeforeClass; import org.testng.annotations.Configuration; import org.testng.annotations.Test; public class DependencyFinderTest {   private DependencyFinder finder;   @BeforeClass   private void init(){   this.finder = new DependencyFinder();   }   @Test   public void verifyDependencies()   throws Exception {    String targetClss =     "test.com.acme.dona.dep.DependencyFind";    Filter[] filtr = new Filter[] {     new RegexPackageFilter("java|junit|org")};    Dependency[] deps =     finder.findDependencies(targetClss, filtr);    assertNotNull(deps, "deps was null" );    assertEquals(5, deps.length, "should be 5 large");   } }

显然,这两个清单很相似。不过,如果仔细看,您会发现 TestNG 的编码规 则比 JUnit 4 更灵活。清单 1 里,在 JUnit 中我必须把 @BeforeClass 修饰 的方法声明为 static,这又要求我把 fixture,即 finder 声明为 static。我 还必须把 init() 声明为 public。看看清单 2,您就会发现不同。这里不再需 要那些规则了。我的 init() 方法既不是 static,也不是 public。

从最初起,TestNG 的灵活性就是其主要优势之一,但这并非它惟一的卖点。 TestNG 还提供了 JUnit 4 所不具备的其他一些特性。

追求代码质量 - JUnit 4与TestNG的对比(3)

时间:2010-12-11 IBM Andrew Glover

依赖性测试

JUnit 框架想达到的一个目标就是测试隔离。它的缺点是:人们很难确定测 试用例执行的顺序,而这对于任何类型的依赖性测试都非常重要。开发者们使用 了多种技术来解决这个问题,例如,按字母顺序指定测试用例,或是更多地依靠 fixture 来适当地解决问题。

如果测试成功,这些解决方法都没什么问题。但是,如果测试不成功,就会 产生一个很麻烦的后果:所有 后续的依赖测试也会失败。在某些情况下,这会 使大型测试套件报告出许多不必要的错误。例如,假设有一个测试套件测试一个 需要登录的 Web 应用程序。您可以创建一个有依赖关系的方法,通过登录到这 个应用程序来创建整个测试套件,从而避免 JUnit 的隔离机制。这种解决方法 不错,但是如果登录失败,即使登录该应用程序后的其他功能都正常工作,整个 测试套件依然会全部失败!

跳过,而不是标为失败

与 JUnit 不同,TestNG 利用 Test 注释的 dependsOnMethods 属性来应对 测试的依赖性问题。有了这个便利的特性,就可以轻松指定依赖方法。例如,前 面所说的登录将在某个方法之前 运行。此外,如果依赖方法失败,它将被跳过 ,而不是标记为失败。

清单 3. 使用 TestNG 进行依赖性测试

import  net.sourceforge.jwebunit.WebTester; public class AccountHistoryTest {   private WebTester tester;   @BeforeClass   protected void init() throws Exception {   this.tester = new WebTester();   this.tester.getTestContext().     setBaseUrl("http://div.acme.com:8185/ceg/");   }   @Test   public void verifyLogIn() {   this.tester.beginAt("/");   this

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号