0

我正在尝试使用 mockito 为注入 ComboPooledDataSource 的类编写测试用例。

我收到一条错误消息,说 ComboPooledDataSource 是最终类,不能被模拟。所以,我正在考虑模拟接口(数据源)并将其用于测试用例,但不知道该怎么做。

private Datasource cpds;
private Connection connection;

@Test
public void test() throws Exception {

    connection = getConn();
    cpds = mock(DataSource.class);
    when(cpds.getConnection()).thenReturn(connection);
    accessor = new comboPoolUser(cpds);
    accessor.setConnection();

}

comboPoolUser 中调用 getConnection 的方法:

public void setConnection() {

    try {
    connection = comboPooledDataSource.getConnection();
    } catch (SQLException e) {
    throw new RuntimeException("error",e);
    }

}

我的“comboPoolUser”构造函数接受了一个 ComboPooledDataSource,但我试图模拟一个“DataSource”以进行测试,所以我得到一个“找不到符号:构造函数 comboPoolUser(javax.sql.DataSource)”错误。这样做的正确方法是什么?

4

1 回答 1

3

如果您的 ComboPoolUser 只需要 DataSource 接口上的方法,请更改构造函数以使其接受 DataSource。目前它唯一做的就是获得连接,所以从表面上看它看起来是可能的。通常,通过接口传递依赖关系有助于维护封装。

或者,如果 ComboPoolUser 是您自己的类,您可以围绕 ComboPoolDataSource 编写一个包装器,为包装器提供您自己的接口,并使其认为它可以通过检查进行测试(因此包装器中的每个方法都只是一个委托组合池数据源)。然后,您可以模拟包装器的接口。

于 2013-07-19T19:16:50.383 回答