При попытке проверить класс реализации объекта доступа к данным я получаю сообщение об ошибке: «Запрос метода (String, Object [], ResultSetExtractor, Class) неоднозначен для типа JdbcTemplateTestWrapper».В строке, которая выдает ошибку, я пытаюсь использовать сопоставители EasyMock для сопоставления аргументов, передаваемых в вызываемый метод «запрос».Кто-нибудь может объяснить, почему я получаю эту ошибку?Примечание: JdbcTemplateTestWrapper, созданный для целей тестирования, расширяет JdbcTemplateWrapper.
Строка, которая выдает ошибку в моих тестах JUnit: expect(jdbcTemplate.query(EasyMock.anyObject(), EasyMock.anyObject(),
EasyMock.anyObject(), EasyMock.anyObject())).andReturn(tranList);
Вызов метода в моем классе реализации объекта доступа к данным, которыйтребуется ожидание:
tranList = (List<TransactionSummary>) jdbcTemplate.query(sqlStatement,
args, new RowMapperResultSetExtractor(mapper),
TransactionSummary.class);
Метод "query" вызывается в моем классе JdbcTemplateTestWrapper:
public <T> List<T> query(String sql, Object[] args, ResultSetExtractor extractor, Class<T> returnType) {
List<T> list = null;
try {
list = (List<T>) jdbcOperations.query(sql, args, extractor);
} catch (DataAccessException e) {
throw new RuntimeException("Problem retrieving data from AS400",
e);
}
return list;
}
Метод "query" в JdbcTemplateWrapper, который переопределяется тем, что вJdbcTemplateTestWrapper:
public <T> List<T> query(String sql, Object[] args, ResultSetExtractor
extractor, Class<T> returnType) {
long queryStartTime = 0;
long queryEndTime = 0;
StringBuilder queryArgs = new StringBuilder();
try {
queryStartTime = System.currentTimeMillis();
@SuppressWarnings("unchecked")
List<T> results = (List<T>) super.query(sql, args, extractor);
queryEndTime = System.currentTimeMillis();
try{
if(isLogSQLCalls() && ((queryEndTime - queryStartTime) >
queryExecutionTime)){
//Uncomment following line to get the JDBC Call
//message printed to tomcat window/tomcat log file
//StringBuilder loggerInfo = buildLogMessage(sql,
//args, queryStartTime, queryEndTime,
//results.size());
for (Object object : args) {
queryArgs.append(object + " # ");
}
updateAuditLogDao.logJDBCCall(sql, queryArgs,
queryStartTime, queryEndTime, results.size(), 0);
//Uncomment following line to get the JDBC Call
//message printed to tomcat window/tomcat log file
//LOGGER.info(loggerInfo);
}
}catch(Exception exception){
LOGGER.fatal(exception, exception);
}
return results;
} catch (DataAccessException e) {
queryEndTime = System.currentTimeMillis();
try{
if(isLogSQLCalls() && ((queryEndTime - queryStartTime) >
queryExecutionTime)){
updateAuditLogDao.logJDBCCall(sql, queryArgs,
queryStartTime, queryEndTime, 0, 1);
}
}catch(Exception exception){
LOGGER.fatal(exception, exception);
}
LOGGER.fatal(e, e);
throw new RuntimeException("Problem retrieving data from AS400",
e);
}
}