有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这是Testng中的一个bug。在6.9.5中解决。请升级