3
目前,每當我需要響應在另一個線程拋出的異常失敗的測試,我寫的是這樣的:失敗單元測試,如果一個異常被另一個線程拋出
package com.example;
import java.util.ArrayList;
import java.util.List;
import org.testng.annotations.Test;
import static java.util.Arrays.asList;
import static java.util.Collections.synchronizedList;
import static org.testng.Assert.fail;
public final class T {
@Test
public void testFailureFromLambda() throws Throwable {
final List<Throwable> errors = synchronizedList(new ArrayList<>());
asList("0", "1", "2").parallelStream().forEach(s -> {
try {
/*
* The actual code under test here.
*/
throw new Exception("Error " + s);
} catch (final Throwable t) {
errors.add(t);
}
});
if (!errors.isEmpty()) {
errors.forEach(Throwable::printStackTrace);
final Throwable firstError = errors.iterator().next();
fail(firstError.getMessage(), firstError);
}
}
}
一個同步列表可能會被替換爲AtomicReference<Throwable>
,但通常代碼仍然幾乎相同。
有什麼標準(和更簡潔)幹什麼用任何測試框架提供的Java相同的方式(TestNG,JUnit,Hamcrest,AssertJ等)?
如果我想阻止失敗整個測試,並繼續軟斷言,如果有異常軟斷言一個拋出? – enissay
@enissay - 默認情況下,只有在所有聲明都已經過驗證之後,'SoftAssertions'纔會通過測試。 –
這不是我的經驗。也許我做錯了。我發佈了這個[問題](https://stackoverflow.com/q/46681601/3619769),希望你能幫助我:) – enissay