我有以下@AfterSuit
方法。如果我删除 alwaysRun=true,TestNG 不会执行它。
@AfterSuite(alwaysRun=true)
public void finishsuit()
{
System.out.println("completed suit");
}
我检查了alwaysRun的文档,它说:
For after methods (afterSuite, afterClass, ...): If set to true, this configuration method will be run even if one or more methods invoked previously failed or was skipped.
这就是我的理解:如果 @Test
中的任何一个在 <test>
中指定的任何类中定义的方法属于当前诉讼失败,则 @AfterSuit
除非我们指定alwaysRun=true
,否则不会执行.
但就我而言,@Test
都没有。正在失败。仍然是我的@AfterSuite
如果没有 alwaysRun=true
则不会执行
最佳答案
您可能正在组中运行测试方法,而 AfterSuite 不属于任何组,这就是您需要 alwaysRun=true
的原因。
但是因为我发现您对alwaysRun 行为有点困惑,所以我将继续解释...
对于 @BeforeXXXX 方法,如果您想要运行该方法(尽管该方法不属于您正在运行的组),则需要分配alwaysRun。 例如。
public class TestConfig {
@BeforeSuite
public void beforeSuite() {
doSomething();
}
}
public class TestClassA extends TestConfig {
@Test(groups = { "groupA" })
public void testA() {
doTest();
}
}
在这种情况下,如果我们运行组“groupA”,则 @BeforeSuite 方法不是我们正在执行的组的一部分,除非我们指定alwaysRun = true
。
这同样适用于 @AfterXXXX 方法,此外,如果您想运行它们,尽管它们的 @Before 对应项已失败或有任何依赖方法,则它们需要 alwaysRun=true。例如:
public class TestClassA {
@BeforeSuite( groups = { "testA" })
public void beforeSuite() {
doSomethingBefore();
throw new RuntimeException();
}
@Test( groups = { "testA" })
public void testA() {
doTest();
}
@AfterSuite( groups = { "testA" })
public void afterSuite() {
doSomethingAfter();
}
}
现在,@AfterSuite 方法将不会运行,因为它的对应 @BeforeSuite 方法已失败。如果 @AfterSuite 位于 @BeforeClass 失败的类上,同样适用。但如果我们添加 alwaysRun=true
testng 将忽略之前的任何失败并继续进行。
这些都不适用于@TEST方法。 @BeforeXXXX 和 @AfterXXXX 方法将忽略任何 @Test 结果运行,除非您指定 test dependency .
最后,@Test方法中的alwaysRun的行为方式与ignoreMissingDependency=true
类似。例如:
@Test
public void testA() {
doTestA();
}
@Test(dependsOnMethods = { testA }))
public void testB() {
doTestB();
}
同样,在这种情况下,testB 将不会运行,因为它依赖于@TestA,除非我们分配alwaysRun=true(或ignoreMissingDependency=true)。
关于java - 为什么@AfterSuit 在没有alwaysRun=true 的情况下不运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574868/