首先,我不认为这是this issue。
无论如何,这在我运行actualTest时起作用:
public class Foo {
@BeforeGroups("Group1")
public static void doThisFirst() {
System.out.println("first");
}
@Test(groups="Group1")
public void actualTest() {
System.out.println("test");
}
}
打印出“first”然后“test”。这也有效:
public class Foo {
@BeforeGroups("Group1")
public static void doThisFirst() {
System.out.println("first");
}
public class Bar extends Foo {
@Test(groups="Group1")
public void actualTest() {
System.out.println("test");
}
}
}
但是不有效,只有在运行actualTest时打印“test”:
public class Foo {
@BeforeGroups("Group1")
public static void doThisFirst() {
System.out.println("first");
}
public class Bar {
@Test(groups="Group1")
public void actualTest() {
System.out.println("test");
}
}
}
BeforeGroups注释是否必须在类或超类中才能运行?我在doc中没有看到任何关于此的内容。我用Google搜索了,上面的链接是我发现的最接近的东西。有谁知道我错过了什么?
我也尝试了@BeforeGroups(groups="Group1")
变体。同样的行为。
作为一项规则,我从套件中运行该组(通常来自maven-surefire-plugin,有时使用TestNG插件从eclipse运行),但是当我搜索特定问题时,我尝试运行单独测试(几乎总是来自eclipse)以便更快地迭代。
我还应该说我有一个解决方法。我有一个包含所有BeforeGroups和AfterGroups方法的类,然后我为任何需要这些方法的类扩展它。但看起来像TestNG应该能为我做的簿记。
答案 0 :(得分:0)
您的问题与测试背景有关。如果你从例如IDEA,它将生成以下xml:
<suite name="Default Suite">
<test name="testngex">
<classes>
<class name="Foo$Bar">
<methods>
<include name="actualTest"/>
</methods>
</class>
</classes>
</test>
</suite>
如您所见,没有关于您的@Before方法的信息。要使其工作,您需要具有以下xml:
<suite name="Default Suite">
<test name="testngex">
<packages>
<package name="path.to.foo.class"/>
</packages>
</test>
</suite>
你会得到预期的结果。无论如何用@Before和@After扩展BaseTestClass是更好的解决方案。
答案 1 :(得分:0)
面临同样的问题。
将@Test(groups="Group1")
添加到您的Foo
课程