Неоднозначная ошибка метода Java для шаблона Jdbc - PullRequest
0 голосов
/ 25 марта 2019

При попытке проверить класс реализации объекта доступа к данным я получаю сообщение об ошибке: «Запрос метода (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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...