忽略testng中的一个类

时间:2012-12-17 23:10:28

标签: unit-testing testing testng

运行我的testng套件时,有一些测试类需要忽略。我尝试对需要忽略的类和方法使用@Test(enabled = false)注释。但我的问题是需要忽略的类扩展了一个抽象类,即使我在基类上有@Test(enabled = false)注释,也不会忽略这个抽象类测试方法。在Junit中,我可以在基类上使用@ignore,并且根本不会调用扩展类上的测试方法。我怎样才能在testng中复制这种行为。

同样在我的testng套件中,我按包而不是按类运行测试。因此,即使我尝试对该类进行分组并忽略该组,它也不起作用。 <test name="Test"> <groups> <run> <exclude name="testClass"/> </run> </groups>
<packages>

请帮忙

2 个答案:

答案 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()

}