Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

Java TestNG:@BeforeClass方法失败时跳过所有后续测试类? 我的设置: 包含@BeforeClass方法的TestBase类 几个测试类从TestBase类扩展而来,还包含@BeforeClass方法 testNG 6.8.8 为什么要这样设置 我需要TestBase类中的@BeforeClass来提供所有TestClass都需要的设置,我不想在每个测试类中重复。例如,依赖于线程id的登录凭据 TestBase类还实例化了Selenium WebDriver 我需要测试类中的@BeforeClass来初始化所有@Test方法都需要使用但只需要(或必须)为所有测试构建/调用一次的所有内容。这包括对上述WebDriver实例的调用(这就是为什么“普通”构造函数在这里不起作用) 下面是发生的情况:

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"

当我通过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>
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上,仍然可以看到错误