Java TestNG:@BeforeClass方法失败时跳过所有后续测试类? 我的设置: 包含@BeforeClass方法的TestBase类 几个测试类从TestBase类扩展而来,还包含@BeforeClass方法 testNG 6.8.8 为什么要这样设置 我需要TestBase类中的@BeforeClass来提供所有TestClass都需要的设置,我不想在每个测试类中重复。例如,依赖于线程id的登录凭据 TestBase类还实例化了Selenium WebDriver 我需要测试类中的@BeforeClass来初始化所有@Test方法都需要使用但只需要(或必须)为所有测试构建/调用一次的所有内容。这包括对上述WebDriver实例的调用(这就是为什么“普通”构造函数在这里不起作用) 下面是发生的情况:
当我通过testNG xml文件运行测试时,其中一个测试类的@BeforeClass方法中出现了异常,那么testNG将跳过所有后续测试类 为什么会发生这种情况?如何预防? 例如,当我将TestBase类中的注释更改为@BeforeSuite时,所有测试都将运行,即使@BeforeClass方法的on中存在异常 例子: 运行xml文件时,将跳过完整的RunAllTestClasses02类 testNG xml文件:Java TestNG:@BeforeClass方法失败时跳过所有后续测试类? 我的设置: 包含@BeforeClass方法的TestBase类 几个测试类从TestBase类扩展而来,还包含@BeforeClass方法 testNG 6.8.8 为什么要这样设置 我需要TestBase类中的@BeforeClass来提供所有TestClass都需要的设置,我不想在每个测试类中重复。例如,依赖于线程id的登录凭据 TestBase类还实例化了Selenium WebDriver 我需要测试类中的@BeforeClass来初始化所有@Test方法都需要使用但只需要(或必须)为所有测试构建/调用一次的所有内容。这包括对上述WebDriver实例的调用(这就是为什么“普通”构造函数在这里不起作用) 下面是发生的情况:,java,selenium,selenium-webdriver,annotations,testng,Java,Selenium,Selenium Webdriver,Annotations,Testng,当我通过testNG xml文件运行测试时,其中一个测试类的@BeforeClass方法中出现了异常,那么testNG将跳过所有后续测试类 为什么会发生这种情况?如何预防? 例如,当我将TestBase类中的注释更改为@BeforeSuite时,所有测试都将运行,即使@BeforeClass方法的on中存在异常 例子: 运行xml文件时,将跳过完整的RunAllTestClasses02类 testNG xml文件: <?xml version="1.0" encoding="UTF-8"
<?xml version="1.0" encoding="UTF-8"?>
<suite name = "MiscSuite">
<test name = "MiscTest">
<classes >
<class name="drkthng.misc.RunAllTestClasses01" />
<class name="drkthng.misc.RunAllTestClasses02" />
</classes>
</test>
</suite>
public abstract class RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
// do something that all Test classes will need
}
}
public class RunAllTestClasses01 extends RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
Assert.assertTrue(false);
}
@Test
public void Test01() {
Assert.assertTrue(true);
}
}
在@BeforeClass方法中引发异常的测试类:
<?xml version="1.0" encoding="UTF-8"?>
<suite name = "MiscSuite">
<test name = "MiscTest">
<classes >
<class name="drkthng.misc.RunAllTestClasses01" />
<class name="drkthng.misc.RunAllTestClasses02" />
</classes>
</test>
</suite>
public abstract class RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
// do something that all Test classes will need
}
}
public class RunAllTestClasses01 extends RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
Assert.assertTrue(false);
}
@Test
public void Test01() {
Assert.assertTrue(true);
}
}
这是Testng中的一个bug。在6.9.5中解决。请升级。尝试添加
@AfterClass(alwaysrun=true)
或/和@AfterMethod(alwaysrun=true)
,默认情况下,如果BeforeClass或BeforeThod未完成,则跳过它们
关于testNG配置失败、策略和alwaysRun的文档解释了配置失败是否/何时导致监听器方法(
alwaysRun
和其他监听器)被跳过、失败策略和最佳实践。也许可以回答这个问题help@ErkiM. 谢谢你,伙计!这肯定会给我们一些启示。仍然有一个问题,为什么所有后续的测试都被跳过,仅仅因为一个!类失败。我相信这是经过设计的,因为您的测试取决于@BeforeClass
的结果,它失败了,因此停止执行。为了解决这个问题,您可以使用alwaysRun
注释您的测试,即:alwaysRun如果设置为true,此测试方法将始终运行,即使它依赖于失败的方法。
我自己没有测试过此方法,让我知道它是如何为你工作的。我想testng中的Bug-在6.9.5中修复了它:@niharika_neo非常感谢你!!!这解决了整个问题!!你不把这个作为答案吗?因为这就是关于我的更新问题(testng版本号6.8.8)-否则我将不得不自己做这件事,你不会得到全部积分;-)不幸的是,错误没有完全解决->如果子类有\@beforeClass,父类有\@beforeClass和\@afterClass,则当一个子类在其自己的\@beforeClass方法中失败时跳过子类的问题仍然有效。此处相同-升级并没有为我解决问题。切换到@BeforeSuite
和@AfterSuite
后,即使在6.11上,仍然可以看到错误