WEB开发网
开发学院软件开发Java 追求代码质量: JUnit 4 与 TestNG 的对比 阅读

追求代码质量: JUnit 4 与 TestNG 的对比

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 从最初起,TestNG 的灵活性就是其主要优势之一,追求代码质量: JUnit 4 与 TestNG 的对比(4),但这并非它惟一的卖点,TestNG 还提供了 JUnit 4 所不具备的其他一些特性,如果依赖方法失败,它将被跳过,依赖性测试JUnit 框架想达到的一个目标就是测试隔离,它的缺点

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

依赖性测试

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.tester.setFormElement("username", "admin"); 
 this.tester.setFormElement("password", "admin"); 
 this.tester.submit();  
 this.tester.assertTextPresent("Logged in as admin"); 
 } 
 
 @Test (dependsOnMethods = {"verifyLogIn"}) 
 public void verifyAccountInfo() { 
 this.tester.clickLinkWithText("History", 0);  
 this.tester.assertTextPresent("GTG Data Feed"); 
 } 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:追求 代码 质量

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接