使用mockito进行接口实现

时间:2013-07-19 18:46:29

标签: java mockito

我正在尝试使用mockto为一个注入了ComboPooledDataSource的类编写一个案例。

我有一个错误,说ComboPooledDataSource是一个最终类,不能被模拟。所以,我正在考虑模拟接口(DataSource)并将其用于测试用例,但我不知道该怎么做。

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)”错误。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

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

或者,如果ComboPoolUser是您自己的类,您可以在ComboPoolDataSource周围编写一个包装器,为包装器提供您自己的接口,并使其认为可通过检查测试(因此包装器中的每个方法都只是ComboPoolDataSoruce的一个代表团。然后,您可以模拟包装器的接口。