我有一个基类,它表示TestNG中的数据库测试,我想指定所有从该类扩展的类都属于“ db-test”组,但是我发现这似乎是不可能的。我尝试了@Test批注:
@Test(groups = { "db-test" })
public class DBTestBase {
}
但是,这是行不通的,因为@Test批注将尝试将大量方法引入测试中,并且在运行测试时会在eclipse中弹出警告/错误。
所以我尝试禁用测试,因此至少分配了组:
@Test(enabled = false, groups = { "db-test" })
public class DBTestBase {
}
但是然后任何@BeforeTest(和其他类似的注释)也被禁用了……这当然不是我想要的。
我想以某种方式将类注释为特定类型的组,但在TestNG中似乎不太可能。还有其他想法吗?
答案是通过自定义的org.testng.IMethodSelector:
它的includeMethod()可以排除我们想要的任何方法,例如公共未注释的方法。
但是,要注册自定义Java MethodSelector,必须将其添加到任何TestRunner管理的XMLTest实例中,这意味着您需要自己的自定义TestRunner。
但是,要构建自定义TestRunner,您需要通过-testrunfactory选项注册一个TestRunnerFactory。
但是TestNG类从不考虑-testrunfactory ...所以您还需要定义一个自定义TestNG类:
好吧...这是一场噩梦。但这也是一个代码挑战,因此它一定有点挑战;)
所有代码都可以在DZone片段中找到。
像往常一样进行代码挑战:
来自Mike Stone的更新:
我将接受这一点,因为这听起来很接近我最终要做的事情,但是我认为我也会补充我所做的事情。
基本上,我创建了一个Groups批注,其行为类似于Test(和其他)批注的groups属性。
然后,我创建了一个GroupsAnnotationTransformer,它使用IAnnotationTransformer查看所有测试和正在定义的测试类,然后修改测试以添加组,这与组排除和包含完美配合。
修改构建以使用新的注释转换器,一切完美!
好吧...一个警告是,它没有将组添加到非测试方法中...因为在我这样做的时候,还有一个注释转换器可以让您转换任何内容,但是却不包含在内在我出于某种原因使用的TestNG中...因此,将您之前/之后的注释方法设置为alwaysRun = true ...是一个好主意,这对我来说已足够。
最终结果是我可以做到:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
然后,我使用子类化和所有内容使变压器工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句