Насмешка над вложенным Groovy методом с помощью Mockito - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь провести некоторое тестирование на унаследованном коде, и я натолкнулся на стену.Код является частью внутреннего сервера для одного из наших угловых веб-приложений.Конкретный код, который мне нужно протестировать, отвечает за управление созданием учетной записи торгового представителя с использованием данных, переданных от клиента.В дополнение к сохранению нового представителя в нашей базе данных mongo, код также должен обрабатывать сохранение во внешнюю базу данных sql.Рабочий процесс выглядит примерно так:

  1. Получение запроса «put» от клиента.
  2. Создание нового объекта «rep» с переданными данными.
  3. Сохраните репутацию в базу данных mongo.
  4. Вызовите класс Groovy, который выполнит «вставку» в удаленную базу данных и вернет идентификатор удаленной записи.
  5. Сохраните удаленный идентификатор вданные монго.

Обычно я бы использовал Mockito для макетирования соединения sql, но я не мог заставить это работать в этом случае.Моей следующей мыслью было попытаться высмеять класс Groovy.Я на самом деле не забочусь о внутренностях Groovy метода, мне просто нужен Id обратноПока что это тоже не сработало.Я подозреваю, что метод groovy вызывается из защищенного метода внутри моего класса обслуживания.У меня нет никакого контроля над сигнатурой этого метода, это переопределение из другой библиотеки.

Могу ли я что-нибудь сделать, чтобы иметь возможность протестировать этот код без необходимости устанавливать фактическое соединение сSql db?

Веб-сервис:

@Override
    protected void beforeInsert() {
        super.beforeInsert();
        final Rep weakRep = this;
        dwPhase1 = injector.getInstance(DwPhase1.class);
        return dwPhase1.insertRepDetail(weakRep);
    }

Код проверки:

DwPhase1 dwGroovy = Mockito.mock(DwPhase1.class);

    Mockito.when(dwGroovy.insertRepDetail(Mockito.any(Rep.class))).then(new Answer<Object>() {

        @Override
        public Object answer(InvocationOnMock invocation) throws Throwable {
            // TODO Auto-generated method stub
            return "hello";
        }
    });

}

Groovyфрагмент:

  class DwPhase1 extends SQL{
 public Number insertRepDetail(Rep r){
 String insert="""insert into REP_DETAIL (some values)""";
 List<List<Object>> rows =null;
        sql.withTransaction {
            if(update!=null){
                sql.executeUpdate(update);
            }
            rows = sql.executeInsert(params,insert.toString());

        }
        Number dwId =  null;
        if(rows!=null && !rows.isEmpty()){
            List columns=rows.get(0);
            if(columns!=null && !columns.isEmpty()){
                dwId = columns.get(0);
            }
        }
        return dwId;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...