1

我正在使用带有 Java 的 TestNG。

我有一个数据提供者方法

@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() 方法的测试失败?

4

1 回答 1

1

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

于 2016-02-12T14:55:17.490 回答