首页 > 解决方案 > 在 Java 中进行单元测试时如何强制调用 SQLException?

问题描述

我在 JUnit 4.xx 上运行 Java 测试。我正在尝试从 try 块中强制运行 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 块得到执行,以便为我的整个程序获得 100% 的行覆盖率?我在这里先向您的帮助表示感谢。

标签: javaunit-testingjunitmockitosqlexception

解决方案


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

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

推荐阅读