运行我的testng套件时,有一些测试类需要忽略。我尝试对需要忽略的类和方法使用@Test(enabled = false)注释。但我的问题是需要忽略的类扩展了一个抽象类,即使我在基类上有@Test(enabled = false)注释,也不会忽略这个抽象类测试方法。在Junit中,我可以在基类上使用@ignore,并且根本不会调用扩展类上的测试方法。我怎样才能在testng中复制这种行为。
同样在我的testng套件中,我按包而不是按类运行测试。因此,即使我尝试对该类进行分组并忽略该组,它也不起作用。
<test name="Test">
<groups>
<run>
<exclude name="testClass"/>
</run>
</groups>
<packages>
请帮忙
答案 0 :(得分:5)
我从谷歌小组(Testng)收到了塞德里克对此的回复。我将其粘贴在下面以供参考
保罗,您所看到的是注释和默认属性的继承在TestNG中相互交互的方式的不幸结果,并且已经提交了一个错误以使其更好地工作(我没有id方便)。 / p>
考虑:
@Test(enabled = false)
public class C {
@Test
public void f()
}
当TestNG解析这些注释时,它会发现方法上的@Test未指定“enabled”,因此它会为其指定默认值。示例变为:
@Test(enabled = false)
public class C {
@Test(enabled = true)
public void f()
}
现在,方法级别定义的值将覆盖类中指定的值。
修复将涉及使用枚举而不是布尔值(ENABLED,DISABLED,INHERITED,这将是默认值),但这会破坏向后兼容性,因此我需要为此引入一个新的注释(例如“runStatus” “或类似的东西),你的例子将成为
@Test(runStatus = DISABLED)
public class C {
@Test
public void f()
}
这有意义吗?
- 塞德里克
答案 1 :(得分:1)
正如Cedric的回应中所提到的,方法级别的测试注释会覆盖类级别的测试注释。因此,即使您在类级别具有@Test(enabled = false),也会启用测试方法。我遇到了同样的问题。它通过以下方法得到修复。
最简单的解决方案是在类级别使用@Test(enabled = false),但从方法级别删除@Test注释。像这样:
@Test(enabled = false)
public class C
{
public void f()
}