TestNG @BeforeMethod 方法驻留在超类中并且运行特定组时不会被调用

问题描述 投票:0回答:3

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

因此,当我运行所有测试时,emptyTest会失败,因为调用了@BeforeMethod,而当仅运行group 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 配置:

<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>
java testing testng
3个回答
40
投票

您的

@BeforeMethod
需要是您正在运行的团队的一部分。

如果您不想对组的值进行硬编码,并且您认为无论当前正在运行哪个组,您总是想运行此方法,也可以使用

@BeforeMethod(alwaysRun = true)


5
投票

你试过

@BeforeMethod(groups = {"current"})
吗? 我得出的结论是 TestNG 组和继承并没有真正发挥作用。

例如,如果您运行组

current
中的所有内容,则上述方法有效,但如果您运行组 current 之外的所有
other
内容,并且基类用于两个组,则上述内容无效。

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


0
投票

如果您使用带有继承的 testNg 组,请提供 alwaysRun = true 以便运行 @BeforeMethod。

public class TestNGSuperclass {
    @BeforeMethod(alwaysRun = true)
    public void failingToShowThatItIsNotRun() {
    Assert.fail();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.