5

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

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

请帮忙

4

2 回答 2

6

我收到了来自 google groups(Testng) 的 Cedric 对此的回复。我贴在下面供参考

嗨,保罗,

您所看到的是注释继承和默认属性在 TestNG 中相互交互的方式的不幸结果,并且已经提交了一个错误以使其更好地工作(我手边没有 id)。

考虑:

@Test(enabled = false)
public class C {
  @Test
  public void f()
}

当 TestNG 解析这些注解时,它发现方法上的@Test 没有指定“启用”,因此它为其分配了默认值。示例变为:

@Test(enabled = false)
public class C {
  @Test(enabled = true)
  public void f()
}

现在,在方法级别定义的值会覆盖在类中指定的值。

修复将涉及使用枚举而不是布尔值(启用、禁用、继承,这将是默认值),但这会破坏向后兼容性,所以我需要为此引入一个新注释(例如“runStatus”或其他东西像那样),你的例子会变成

@Test(runStatus = DISABLED)
public class C {
  @Test
  public void f()
}

这有意义吗?

——塞德里克

于 2012-12-20T20:49:07.813 回答
2

正如 Cedric 的回应中提到的,方法级别的 Test 注释会覆盖类级别的 Test 注释。因此,即使您在类级别有 @Test(enabled=false),也会启用测试方法。我面临着同样的问题。它通过以下方法得到修复。

最简单的解决方案是在类级别使用 @Test(enabled=false) 但从方法级别删除 @Test 注释。像这样:

@Test(enabled = false)
public class C 
{

  public void f()

}
于 2016-10-24T19:26:33.530 回答