反例
@RunWith(JUnit4.class)
public class Test {
@Test
public void testSomething() {
try {
// ...
} catch (Throwable t) {
// 捕获了根异常Throwable
} catch (Error e) {
// 捕获了根异常Error
}
}
}
正例
@RunWith(JUnit4.class)
public class Test {
@Test
public void testSomething() {
try {
// ...
} catch (Throwable t) {
// 如果的确需要捕获根异常,必须在catch块中手动抛出AssertionError
if (t instanceof AssertionError) {
throw t;
}
}
}
}
解读
捕获java.lang.Throwable、java.lang.Error会使单测始终成功,压制JUnit抛出的AssertionError异常。
文章讨论了在使用JUnit4进行单元测试时,捕获`java.lang.Throwable`和`java.lang.Error`可能导致测试总是成功的潜在问题,强调了正确处理AssertionError的重要性。

被折叠的 条评论
为什么被折叠?



