我正在尝试使用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)”错误。这样做的正确方法是什么?
答案 0 :(得分:3)
如果您的ComboPoolUser仅需要DataSource接口上的方法,请更改构造函数以使其接收DataSource。目前唯一正在做的就是获得连接,所以从表面看它看起来是可能的。通常,通过接口传递依赖关系有助于保持封装。
或者,如果ComboPoolUser是您自己的类,您可以在ComboPoolDataSource周围编写一个包装器,为包装器提供您自己的接口,并使其认为可通过检查测试(因此包装器中的每个方法都只是ComboPoolDataSoruce的一个代表团。然后,您可以模拟包装器的接口。