Java 使用mockito实现接口

Java 使用mockito实现接口,java,mockito,Java,Mockito,我正试图用mockito为一个注入ComboPooledDataSource的类编写一个测试用例 我有一个错误,说ComboPooledDataSource是最后一个类,不能被模仿。因此,我考虑模拟接口(数据源)并将其用于测试用例,但不确定如何实现 private Datasource cpds; private Connection connection; @Test public void test() throws Exception { connection = getCon

我正试图用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();
}

调用getConnection的comboPoolUser中的方法:

public void setConnection() {

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

}

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

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


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

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


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

您发布的代码是否以某种方式失败?
错误地说ComboPooledDataSource是最终类,无法模拟
他在您模拟接口时询问的问题。您发布的代码是否以某种方式失败?
错误地说ComboPooledDataSource是最终类最后一个类,不能被模仿
他问你什么时候模仿了接口。