java - 是否有一种不太详细的方法来默默地忽略 Java 单元测试中的特定嵌套异常?

标签 java unit-testing exception

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

相关文章:

java同步和异常处理

java - 通用捕获声明

java - 枚举 toString 上的 ClassCastException

Java switch 语句要求输入两次

java - 数组和数组列表之间的搜索方法存在问题

java - Maven 和单元测试 - 结合 Maven Surefire 插件和 testNG Eclipse 插件

c++ - 如何向编译器表明函数总是抛出异常?

java - 使用内置排序函数对二维数组进行排序

android - 如何使用 JUnit 测试显示 Android 日志记录输出(使用不带模拟器的 native JUnit)

php - 如何使用 PHPUnit 测试模拟方法链