TestNG @BeforeMethod方法,当它驻留在超类中并运行特定组时不调用

2022-09-02 20:02:35

我正在尝试使用一个组来运行与我正在处理的称为“当前”的内容相关的测试子集。问题是,如果我使用超类在@BeforeMethod中执行某些设置,则该方法在我运行所有测试时运行,但当我仅使用指定的组“current”运行时,该方法不会运行。

因此,当我运行所有测试时,emptyTest 失败,因为调用了@BeforeMethod,当只运行组 current 时,不会调用该方法。注意:如果我将@Test(groups = {“current”})添加到子类中,那么它确实会运行 - 但是,它也运行所有未标有“current”的子类,这违背了“current”组的目的。

如果有更好的方法来完成此行为,我对所有解决方案都持开放态度。

谢谢,赎金

超类:

public class TestNGSuperclass {
    @BeforeMethod
    public void failingToShowThatItIsNotRun() {
        Assert.fail();
    }
}

亚纲:

@Test(groups = {"current"})
public class TestNGCurrentGroup extends TestNGSuperclass {
    public void emptyTest() {}
}

TestNG Configuration:

<test name="current">
    <groups>
        <run>
            <include name="current"/>
        </run>
    </groups>
    <packages>
        <package name="uiowa.wf.test.*"/>
    </packages>
</test>
<test name="all-tests">
    <packages>
       <package name="uiowa.wf.test.*"/>
    </packages>
</test>

答案 1

您需要成为您正在运行的组的一部分。@BeforeMethod

如果您不想对组的值进行硬编码,并且您认为无论当前运行的组如何,您都希望始终运行此方法,也可以使用此方法。@BeforeMethod(alwaysRun = true)


答案 2

你试过吗?我得出的结论是,TestNG组和继承实际上并不那么有效。@BeforeMethod(groups = {"current"})

例如,如果在 组 中运行所有内容,则上述方法有效,但如果运行组以外的所有内容并且基类用于两个组,则上述方法不起作用。currentcurrent

我目前正在重构我们所有的测试类,以消除子类化并改用组合。