首先,我不认为这是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");
    }
}


打印“先”然后“测试”。这也适用:

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应该能够为我做簿记。

最佳答案

您的问题是关于测试的问题。如果您从例如进行测试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是更好的解决方案。

关于java - 除非在父类或本地类中,否则不会调用TestNG BeforeGroups,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36611728/

10-10 08:17