改进TestNG的测试方法依赖管理

来源:互联网 发布:js中遍历数组对象 编辑:程序博客网 时间:2024/06/05 05:23
原链接:http://www.iteye.com/topic/216505
Java代码  收藏代码
  1. @Test(dependsOnMethods="testMethod2")  
  2. public void testMethod1() {  
  3.        System.out.println("in testMethod1");  
  4. }  

这样就表示在执行testMethod1测试之前,先去检查一下testMethod2这个方法,如果testMethod2这个方法测试通过了,才会执行testMethod1,否则直接将testMethod1的执行结果标记为“skipped”。在大型项目的测试中,特别是涉及到一些不纯粹是单元测试的测试时,这个特性非常有用。dependsOnMethods的属性可以引用其他类中的测试方法,如可以写成@Test(dependsOnMethods="com.test.Test1.testMethod2")。 

但这样,我如果要单独执行某个测试类的话,麻烦就来了(这种单独执行某个测试类的方法在单元测试中基本不存在,但在一些自动化的集成测试、功能测试中因为执行时间的问题就很常见了)。我写了在com.test.Test1这个类的某个测试方法里写了@Test(dependsOnMethods="com.test.Test2.testMethod2"),在执行Test1时,会直接提示出错找不到testMethod2方法,只有把Test1和Test2作为一个suite来统一执行的时候才可以正常运行。 

TestNG还有对Group的依赖管理,也同样有这个问题。 

为了解决这个问题,得到一个适合做集成测试、功能测试的TestNG版本,研究了一些TestNG的源代码,发现修改两个地方可以解决这个问题: 
1. org.testng.internal.MethodHelper的findMethodsNamed方法。这个方法是用来根据名字查找测试方法的,不存在会抛出异常。将抛出异常的部分注释掉即可,如下。 
Java代码  收藏代码
  1.             if (!foundAtLeastAMethod) {  
  2.                 System.out.println("依賴的方法沒有找到。");  
  3.                   
  4. //              throw new TestNGException(mainMethod  
  5. //                      + "() is depending on nonexistent method "  
  6. //                      + currentRegexp);  
  7.             }  

这个方法只有在检查测试依赖项时才会被调用,可以放心修改,不会影响其他功能。 
2. org.testng.internal.Invoker类的checkDependencies方法,这里头有一段为检查依赖中是否有不存在group,将其注释掉即可。 

Java代码  收藏代码
  1. // Any missing group?  
  2. // if (testMethod.getMissingGroup() != null) {  
  3. // return false;  
  4. // }  



这样修改了之后,当某个测试方法的依赖中有不存在的method或者group时,就不会skip这个method,而是直接执行这个method了。开源的东西果然还是方便啊。


0 0
原创粉丝点击