浏览 3577 次
锁定老帖子 主题:改进TestNG的测试方法依赖管理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-19
@Test(dependsOnMethods="testMethod2") public void testMethod1() { System.out.println("in testMethod1"); } 这样就表示在执行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方法。这个方法是用来根据名字查找测试方法的,不存在会抛出异常。将抛出异常的部分注释掉即可,如下。 if (!foundAtLeastAMethod) { System.out.println("依賴的方法沒有找到。"); // throw new TestNGException(mainMethod // + "() is depending on nonexistent method " // + currentRegexp); } 这个方法只有在检查测试依赖项时才会被调用,可以放心修改,不会影响其他功能。 2. org.testng.internal.Invoker类的checkDependencies方法,这里头有一段为检查依赖中是否有不存在group,将其注释掉即可。 // Any missing group? // if (testMethod.getMissingGroup() != null) { // return false; // } 这样修改了之后,当某个测试方法的依赖中有不存在的method或者group时,就不会skip这个method,而是直接执行这个method了。开源的东西果然还是方便啊。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |