java TestNG:当@BeforeClass方法失败时,会跳过所有后续的测试类吗?
我的设置:
- 包含@BeforeClass方法的测试基类
- 几个测试类从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文件:
<?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>
带有@BeforeClass方法的TestBase类:
public abstract class RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
// do something that all Test classes will need
}
}
在@BeforeClass方法中引发异常的测试类:
public class RunAllTestClasses01 extends RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
Assert.assertTrue(false);
}
@Test
public void Test01() {
Assert.assertTrue(true);
}
}
# 1 楼答案
这是Testng中的一个bug。在6.9.5中解决。请升级