我有下面的@AfterSuit
方法。如果我删除alwaysRun = true,则TestNG不会执行它。
@AfterSuite(alwaysRun=true)
public void finishsuit()
{
System.out.println("completed suit");
}
我检查了alwaysRun文档,它说:
对于after方法(afterSuite,afterClass,...):如果设置为true,则此
即使调用一个或多个方法,配置方法也将运行
先前失败或被跳过。
这就是我的理解:如果在属于当前诉讼的任何
@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方法。除非指定test dependency,否则@BeforeXXXX和@AfterXXXX方法将忽略任何@Test结果运行。
最后,@ Test方法中的alwaysRun的行为与
ignoreMissingDependencies=true
类似。例如:@Test
public void testA() {
doTestA();
}
@Test(dependsOnMethods = { testA }))
public void testB() {
doTestB();
}
同样,在这种情况下,testB将不会运行,因为它依赖于@TestA,除非我们指定alwaysRun = true(或ignoreMissingDependencies = true)。
希望对您有帮助。