TestNG:当@BeforeClass 方法失败时,是否会跳过所有后续测试 类?
TestNG: All subsequent Test classes are skipped when @BeforeClass method fails?
我的设置:
- 一个 TestBase class 包含一个 @BeforeClass 方法
- 几个测试 classes 从 TestBase class 扩展并且还包含一个 @BeforeClass 方法
- testNG 6.8.8
为什么要这样设置?:
- 我需要 TestBase class 中的 @BeforeClass 来提供所有测试 class 都需要的设置,我不想在每个测试 class 中重复。例如依赖于线程 ID 的登录凭据。
- TestBase class 还实例化了 Selenium WebDriver
- 我需要测试 classes 中的 @BeforeClass 来初始化所有 @Test 方法将需要使用但只需要(或必须)对所有测试 built/invoked 一次的所有内容.这包括对所述 WebDriver 实例的调用(这就是 "normal" 构造函数在这里不起作用的原因)
情况如下:
当我 运行 通过 testNG xml 文件进行测试时,在其中一个测试 classes,然后 所有后续测试 classes 被 TestNG.
跳过
为什么会这样?如何预防?
例如,当我将 TestBase class 中的注释更改为 @BeforeSuite 时,那么 所有测试都是 运行,即使@BeforeClass 方法中的一个出现异常。
示例:
当您 运行 xml 文件时,将跳过完整的 RunAllTestClasses02 class。
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>
TestBase class 使用@BeforeClass 方法:
public abstract class RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
// do something that all Test classes will need
}
}
测试 class 在@BeforeClass 方法中抛出异常:
public class RunAllTestClasses01 extends RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
Assert.assertTrue(false);
}
@Test
public void Test01() {
Assert.assertTrue(true);
}
}
这是 Testng 中的错误。在 6.9.5 中解决。请升级。
尝试添加 @AfterClass(alwaysrun = true)
or/and @AfterMethod(alwaysrun=true)
因为默认情况下,如果 BeforeClass 或 BeforeMethod 未完成,它们将被跳过。
有关 testNG 配置失败、策略和 alwaysRun 的文档解释了 whether/when 配置失败导致侦听器方法(alwaysRun
和其他侦听器)被跳过、失败策略和最佳实践。
我的设置:
- 一个 TestBase class 包含一个 @BeforeClass 方法
- 几个测试 classes 从 TestBase class 扩展并且还包含一个 @BeforeClass 方法
- testNG 6.8.8
为什么要这样设置?:
- 我需要 TestBase class 中的 @BeforeClass 来提供所有测试 class 都需要的设置,我不想在每个测试 class 中重复。例如依赖于线程 ID 的登录凭据。
- TestBase class 还实例化了 Selenium WebDriver
- 我需要测试 classes 中的 @BeforeClass 来初始化所有 @Test 方法将需要使用但只需要(或必须)对所有测试 built/invoked 一次的所有内容.这包括对所述 WebDriver 实例的调用(这就是 "normal" 构造函数在这里不起作用的原因)
情况如下:
当我 运行 通过 testNG xml 文件进行测试时,在其中一个测试 classes,然后 所有后续测试 classes 被 TestNG.
跳过为什么会这样?如何预防?
例如,当我将 TestBase class 中的注释更改为 @BeforeSuite 时,那么 所有测试都是 运行,即使@BeforeClass 方法中的一个出现异常。
示例:
当您 运行 xml 文件时,将跳过完整的 RunAllTestClasses02 class。
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>
TestBase class 使用@BeforeClass 方法:
public abstract class RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
// do something that all Test classes will need
}
}
测试 class 在@BeforeClass 方法中抛出异常:
public class RunAllTestClasses01 extends RunAllTestClassesBase {
@BeforeClass
public void beforeClass() {
Assert.assertTrue(false);
}
@Test
public void Test01() {
Assert.assertTrue(true);
}
}
这是 Testng 中的错误。在 6.9.5 中解决。请升级。
尝试添加 @AfterClass(alwaysrun = true)
or/and @AfterMethod(alwaysrun=true)
因为默认情况下,如果 BeforeClass 或 BeforeMethod 未完成,它们将被跳过。
有关 testNG 配置失败、策略和 alwaysRun 的文档解释了 whether/when 配置失败导致侦听器方法(alwaysRun
和其他侦听器)被跳过、失败策略和最佳实践。