【问题标题】:Check exception invalid for Mockito SQLException throw检查异常对 Mockito SQLException throw 无效
【发布时间】:2021-04-12 07:54:58
【问题描述】:

我基本上想要的是全面覆盖下面的代码sn-p

public Connection getDbConnection() {
    Logger logger = LoggerFactory.getLogger("DatabaseConnection.class");
    PropertyUtility propUtility = new PropertyUtility();
    Properties prop = propUtility.getDbProperty();
    Connection conn = null;
    try
    {
        final String dbUrl = prop.getProperty("db.url");
        final String dbUsername = prop.getProperty("db.user");
        final String dbPassword = prop.getProperty("db.password");

        conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
    }
   catch (SQLException ex)
    {
           logger.error("Cannot connect to database server");
           logger.error(ex.getMessage());
    }      
    return conn;
}

我想模拟一个 SQLException throw 到 getDbConnection 中,以便它也涵盖捕获场景,这就是我到目前为止所拥有的。

DatabaseUtility db = new DatabaseUtility();
DatabaseUtility dbMock;
void setUp() throws Exception {
    dbMock = mock(DatabaseUtility.class);
}
@Test
final void testGetDbPropertyFail () {
    when(dbMock.getDbConnection()).thenThrow(new SQLException("TEST"));
    assertEquals(null,db.getDbConnection());
}

当我尝试通过 junit 进行代码覆盖时,仍然没有覆盖 catch 场景,并导致“检查的异常对此方法无效”

我已经尝试过来自 stackoverflow 的其他可能的论坛,但没有一个对我有用。

【问题讨论】:

    标签: java junit mockito


    【解决方案1】:

    我猜getDbConnection()DatabaseUtility 的一个方法,你想对DatabaseUtility 类进行单元测试,对吧?

    “Checked exception is invalid for this method”是字面意思,这意味着 Mockito 只允许模拟抛出 Runtime exceptions

    此外,您可以使用 Mockito 提供的verify() 方法来验证模拟对象的状态变化或调用时间。 (并且,抱歉冒犯,mock 表示虚拟化目标测试模块的其他相关模块,但不要模拟目标,因此它将通过代码中的真实逻辑,而不是单元测试库提供的假接口。)

    What is Mocking?

    https://www.baeldung.com/mockito-verify

    【讨论】:

    • 这回答了我的问题,谢谢!看来我误解了嘲笑的使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多