java - 在 Java 中进行单元测试时如何强制调用 SQLException?

标签 java unit-testing junit mockito sqlexception

我正在 JUnit 4.xx 上运行 Java 测试。我试图从 try block 强制运行 SQLException。我以多种不同的方式运行了 Mockito,但没有得到我想要的结果。

这是我的主文件:

public boolean close()   {

    if (connection == null) {
        throw new IllegalStateException("Connection never initialized!");
    }

    try {
        connection.close();
        return true;
    }

    catch (SQLException e)
    {
        LOGGER.logp(Level.INFO, CLASS_NAME, "close", e.getMessage());
        return false;
    }

}

这是我的测试文件:

@Test
public void testFail2() throws SQLException {

    JDBCConnection spyConnect = mock(JDBCConnection.class);

    given(spyConnect.getConnection()).willAnswer(invocationOnMock -> new SQLException());

    assertFalse(spyConnect.close());
}

总之,如何让 catch block 得到执行,以便我的整个程序获得 100% 的行覆盖率? 感谢您提前提供的帮助。

最佳答案

如果你希望你的模拟抛出异常,你应该使用 willThrow ,而不是 willAnswer:

given(spyConnect.getConnection()).willThrow(new SQLException());

关于java - 在 Java 中进行单元测试时如何强制调用 SQLException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806673/

相关文章:

unit-testing - 如何模拟已声明的私有(private)字段?

java - JUnit 测试 spring 集成配置

java - 在另一个字符串中找到该字符串的字符有多少次

java - 在小程序中读写文件

java - Mockito 测试 - 上下文对象为 null 异常

database - 为复杂数据库 (EAV) 生成单元测试数据

java - 如何获取 JUnit 5 中测试的当前重复次数?

java - JTextPane 和空白填充空间

java - Spring Boot REST 服务器在带有 @Validated 的意外请求正文的 POST 上抛出 HttpRequestMethodNotSupportedException

java - 找不到导入 junit jupiter api