如何在myDAOTest类中编写一个方法以使用Mockito测试我的DAOImpl类?这是我需要从TestClass进行测试的方法。
@Override
public myCustomResponse mymethod(String query, Map<String, Object> parameters) {
jdbcTemplate.query(query, parameters, new ResultSetExtractor<List<MyObject>>() {
@Override
public List<MyObject> extractData(ResultSet result) throws SQLException, DataAccessException {
try {
List<MyObject> myObject= new ArrayList<>();
while (result.next()) {
response = getResponseDetails(result);
}
return myObject;
} catch (SQLException sqlException) {
LOG.debug(MyConstants.DATABASE_EXCEPTION_MESSAGE);
throw new MyCustomeException(MyConstants.DATABASE_EXCEPTION_MESSAGE);
}
}
});
}
return response;
}
答案 0 :(得分:0)
可能性1:
将ResultSetExtractor提取到它自己的类中,这使得测试比作为匿名内部类要简单得多。
可能性2:
模拟jdbcTemplate,创建ArgumentCaptor,调用该方法,然后执行...
..
FROM '
|| tbl_name || ' a2 JOIN bbx_slope b
ON SDO_CONTAINS(a2.GEOMETRY, b.POINT) = ''TRUE''
WHERE a2.ID = a1.id --This one
GROUP BY a2.ID
..
这使您可以从ArgumentCaptor获取ResultSetExtractor并在其上运行测试。但这会使您的整个测试变得复杂,因此我仍然建议可能性1。
可能性3:
针对内存数据库测试整个过程,仅间接测试ResultSetExtractor。由于这似乎是Spring,因此有很容易的方法,但是,当然,您的单元测试现在将包括整个SpringApplicationContext,db等。这使其比仅包含模拟的“纯”单元测试慢。由于它是向数据库触发查询的一种方式,因此无论如何您都需要对数据库运行查询,否则您的测试将不会真正完成(通过模拟进行模拟对基础知识是有益的,但不是同一件事)。 / p>