【发布时间】:2016-08-13 05:03:27
【问题描述】:
我正在为一些使用 HSQLDB 从中获取数据的代码编写测试用例。但是,内存数据库不支持我的 DAO 调用的某个查询/函数。
我试图在触发此特定查询时返回自定义ResultSet,否则默认为正常行为(从内存数据库中获取)。
相关代码:
db = new EmbeddedDatabaseBuilder().addScript("resources/create-test-db.sql")
.addScript("resources/add-test-data.sql").build();
Connection conn = Mockito.spy(db.getConnection());
PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class);
when(conn.prepareStatement(query)).thenReturn(mockPreparedStatement);
然后我将conn 传递给我的对象。但是,似乎 HSQL 实际上是在尝试运行查询,因此出现错误。
我应该怎么做?
【问题讨论】:
-
您可以将此查询提取到一个方法中并模拟该方法。
-
你在测试什么?如果您正在测试 DAO,那么模拟连接和准备好的语句以及结果集将不会测试您的代码的任何内容。如果您使用 DAO 测试服务,那么您应该模拟 DAO,而不是连接。
-
不幸的是,我正在测试一个调用这个 DAO 的服务。当前的实现使得传递模拟 DAO 不是一种选择。因此,我的方法
标签: java unit-testing mockito hsqldb