@Test(groups = { "db-test" }) public class DBTestBase { }
但是,这不起作用,因为@Test注释将尝试将一堆方法放入测试中,并且在运行测试时会在eclipse中弹出警告/错误.
所以我尝试禁用测试,所以至少这些组被分配:
@Test(enabled = false,groups = { "db-test" }) public class DBTestBase { }
但是然后任何@BeforeTest(和其他类似的注释)也被禁用了…这当然不是我想要的.
我想要一些方法来将类注释为特定类型的组,但在TestNG中似乎不太可能.有没有人有其他想法?
解决方法
它的includeMethod()可以排除任何我们想要的方法,像一个public not-annotated方法.
但是,要注册自定义Java MethodSelector,您必须将其添加到任何TestRunner管理的XMLTest实例中,这意味着您需要自己的自定义TestRunner.
但是,要构建定制的TestRunner,您需要通过-testrunfactory选项注册TestRunnerFactory.
但是,TestNG类绝对不会被考虑,所以你还需要定义一个自定义的TestNG类:
>为了覆盖configure(Map)方法,
>所以你可以设置TestRunnerFactory
TestRunnerFactory将为您建立一个自定义的TestRunner,
TestRunner将为XMLTest实例设置一个自定义XMLMethodSelector
> XMLMethodSelector,它将构建一个自定义的IMethodSelector
> IMethodSelector将排除您选择的任何TestNG方法!
好吧,这是一场噩梦.但它也是一个代码挑战,所以一定有点挑战;)
所有代码可在DZone snippets.
像往常一样的代码挑战:
>一个java类(和很多内部类)
>将类粘贴到“source / test”目录中(由于该包是’test’)
>运行它(不需要参数)
Mike Stone的更新:
我会接受这一点,因为它听起来和我最后所做的很接近,但是我想我会添加我所做的一切.
基本上,我创建了一个Groups注释,其行为类似于Test(和其他)注释的groups属性.
然后,我创建了一个GroupsAnnotationTransformer,它使用IAnnotationTransformer查看正在定义的所有测试和测试类,然后修改测试以添加组,这与组排除和包含完全一致.
修改构建以使用新的注释变压器,这一切都可以完美地工作!
嗯…一个警告是,它不会将组添加到非测试方法…因为在这个时候,还有一个注释变压器,可以让你转换任何东西,但它不包括在内在TestNG我正在使用某些原因…所以这是一个好主意,使您的前/后注释方法alwaysRun = true …这对我来说足够了.
最终的结果是我可以做的:
@Groups({ "myGroup1","myGroup2"}) public class MyTestCase { @Test @Groups("aMethodLevelGroup") public void myTest() { } }
我使变压器工作与子类和一切.