我有一些单元测试,它们执行调用测试服务器的代码,以确保请求格式正确(即我们得到有效的数据作为响应)。然而,这意味着如果该测试服务器关闭,单元测试以及构建可能会被阻止。这不符合良好的单元测试实践,但作为一个思想实验,假设我不允许删除这些测试或更改它们,因此它们实际上不会调用服务器。我想更改它们,以便在服务器关闭时它们仍然可以通过(即尝试连接导致 ConnectException),但如果发生任何其他异常则失败。更困难的是,被测试的代码不会直接抛出 ConnecException,而是抛出包含它的包装异常。因此,最初,这意味着每个测试都将如下所示:
@Test
public void testNumberOne() {
// body of test...
}
对此:
@Test
public void testNumberOne() {
try {
// body of test...
} catch (ThirdPartyWrapperException e) {
if (!(e.getRootCause() instanceof ConnectException) {
throw e;
}
}
}
有什么方法可以避免将 try/catch 粘贴到每个单元测试中吗?
我知道我至少可以重构其中的一些,唉:
@Test
public void testNumberOne() {
try {
// body of test...
} catch (ThirdPartyWrapperException e) {
handleException(e);
}
}
private void handleException(ThirdPartyWrapperException e)
throws ThirdPartyWrapperException {
if (!(e.getRootCause() instanceof ConnectException) {
throw e;
}
}
但是我还能做些什么吗?
最佳答案
我会在开头添加一行以确定所需的资源是否可用
@Test
public void testNumberOne() {
if (!requiredServerAvailable()) return;
关于java - 是否有一种不太详细的方法来默默地忽略 Java 单元测试中的特定嵌套异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403837/