是否有一种不那么冗长的方法来静默忽略Java单元测试中的特定嵌套异常?

时间:2011-12-06 17:06:59

标签: java unit-testing exception-handling

我有一些单元测试,它运行代码调用测试服务器,以确保请求格式正确(即我们得到有效数据作为响应)。但是,这意味着如果此测试服务器关闭,则单元测试以及构建可能会被阻止。这不符合良好的单元测试实践,但作为一个思想实验,假设我不允许删除这些测试或更改它们,以便它们实际上不会呼叫服务器。我想更改它们,以便它们在服务器关闭时仍然通过(即尝试连接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粘贴到每个单元测试中吗?

我知道我至少可以重构一些,ala:

@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;
    }
}

但我还能做些什么吗?

1 个答案:

答案 0 :(得分:2)

我会在开头添加一行来确定所需资源是否可用

@Test
public void testNumberOne() {
    if (!requiredServerAvailable()) return;