Java TestNG无法从线程测试失败

Java TestNG无法从线程测试失败,java,testing,automated-tests,testng,testng-dataprovider,Java,Testing,Automated Tests,Testng,Testng Dataprovider,我将TestNG与Java一起使用 我有一个数据提供者方法 @DataProvider public static Object[][] dataProviderMethod() { return testCaseDataProvider; } 以及测试方法 @Test(dataProvider = "dataProviderMethod") public static void executeTestCase (SheetProvider sheetData, boolean par

我将TestNG与Java一起使用

我有一个数据提供者方法

@DataProvider
public static Object[][] dataProviderMethod() {
    return testCaseDataProvider;
}
以及测试方法

@Test(dataProvider = "dataProviderMethod")
public static void executeTestCase (SheetProvider sheetData, boolean parallel) {
    //some code
    if(condition) {
        //spawn threads
    }
    else {
        //do not spawn threads. directly call run method.
    }
}
现在在
run()
中,我想确定测试是否失败或通过。我试图通过使用
Assert.fail()来实现这一点内部运行方法。
它可以按顺序执行,但会出现异常

Exception in thread "T3" java.lang.AssertionError: null
并行执行

我理解这个问题是因为断言错误应该被测试方法捕获。因此,在顺序执行的情况下,它运行良好,测试失败,但在并行执行的情况下,在我们调用Assert.fail()时,测试方法已经执行


有人能告诉我如何通过run()方法使测试失败吗?

您的测试显示的真正问题是,当异常在并行线程中发生时,不会委托回调用方,您应该更改代码以将任何执行异常传递回调用方,在正常情况下,当程序员出错时,也会发生异常。如果错误被传回给调用者,那么您的问题就解决了。

是。这是正确的。但问题是我不想一直并行运行测试。另外,一旦创建了线程,就会形成一个新的堆栈,因此我们无法将异常返回到基类。如果使用
执行器
生成线程,则有一个
未来
,可以调用
get()
继续阻止,直到完成为止,如果出了问题,你可以更清楚地知道你的问题是什么。在单个TestNG线程中,您正在生成自己的多个线程,并希望将这些多线程中发生的事情的结果传播回单个TestNG线程以报告结果。看起来很简单,但很容易混淆TestNG线程和您自己的线程。你没有提供足够的关于你正在做什么的信息,但我怀疑你的分叉线程可能不需要,而是可以让你的TestNG数据提供者管理你的线程。