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

时间:2018-06-11 22:02:48

标签: java unit-testing junit mockito 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%的整体程序覆盖率? 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您希望模拟引发异常,则应使用willThrow,而不是willAnswer

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