【问题标题】:JUnit - SQLException, how to get coverage?JUnit - SQLException,如何获得覆盖?
【发布时间】:2016-07-02 17:15:41
【问题描述】:

我知道我可以使用 Mockito 强制从 DAO 方法抛出异常,但是如何正确地在 DAO 类中获得测试覆盖率?

例子:

public static void addUser(int userId, int groupId)
        throws DataSourceException {
    String query = "INSERT INTO RUserGroup (userId, groupId) VALUES (?, ?)";
    Connection connection = Pool.getInstance().getConnection();
    try (PreparedStatement ps = connection.prepareStatement(query);) {
    // ...
    } catch (SQLException e) {
        throw new DataSourceException(e);
    } finally {
        Pool.getInstance().returnConnection(connection);
    }
}

我怎样才能达到“throw new DataSourceException(e)”?我在代码中有很多这样的案例,它们完全破坏了分支覆盖。我正在使用 JaCoCo 进行报道。

【问题讨论】:

  • 这看起来很难测试,因为它依赖于静态方法来提供依赖关系,而不是 DI。

标签: java unit-testing junit jacoco


【解决方案1】:

问题在于模拟 Pool.getInstance() 方法,因为您希望您的连接是模拟的,因为您可以让它在必要时引发异常。
Mockito 不允许你这样做。

此类情况见Mocking static methods with Mockito

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 2023-01-23
    • 2012-09-28
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多