我正在尝试使用一个组来运行与我正在从事的称为“当前”的工作相关的测试子集。 问题是,如果我使用超类在 @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>
您的
@BeforeMethod
需要是您正在运行的团队的一部分。
如果您不想对组的值进行硬编码,并且您认为无论当前正在运行哪个组,您总是想运行此方法,也可以使用
@BeforeMethod(alwaysRun = true)
。
你试过
@BeforeMethod(groups = {"current"})
吗? 我得出的结论是 TestNG 组和继承并没有真正发挥作用。
例如,如果您运行组
current
中的所有内容,则上述方法有效,但如果您运行组 current
之外的所有 other内容,并且基类用于两个组,则上述内容无效。
我目前正在重构所有测试类以消除子类化并改用组合。
如果您使用带有继承的 testNg 组,请提供 alwaysRun = true 以便运行 @BeforeMethod。
public class TestNGSuperclass {
@BeforeMethod(alwaysRun = true)
public void failingToShowThatItIsNotRun() {
Assert.fail();
}
}