java – 我可以在TestNG测试用例上指定一个类广泛组吗?

前端之家收集整理的这篇文章主要介绍了java – 我可以在TestNG测试用例上指定一个类广泛组吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基类表示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()可以排除任何我们想要的方法,像一个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() {
    }
}

我使变压器工作与子类和一切.

原文链接:https://www.f2er.com/java/125246.html

猜你在找的Java相关文章