Как имитировать репо JPA в конфигурации сервлета каратэ Mock?

У меня есть проект весенней загрузки 2.2.4 с контроллером REST, службой и репозиторием JPA. Я могу использовать макет сервлета карате, чтобы определить макет контроллера и службы, но я не знаю, что делать с репозиторием. Контроллер @Autowired сервиса. Сервис @Autowired репозиторий.

В результате я получаю это сообщение, когда запускаю свой тест по карате:

Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет подходящего bean-компонента типа 'repository.EmployeeRepository': ожидается как минимум 1 bean-компонент, который квалифицируется как кандидат autowire. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}

MockServlet, который я использую, представляет собой именно этот класс из демонстрации: MockSpringMvcServlet

С классом MockConfig, подобным этому: MockDemoConfig

Наконец, файл karate-config.js загружает MockSpringMvServlet следующим образом (как указано в демонстрационном коде карате):


function fn() {
  var config = {
    baseUrl: 'http://localhost:8080'
  };

  var Factory = Java.type('demo.MockSpringMvcServlet');
  karate.configure('httpClientInstance', Factory.getMock());

  return config;
}

Примечание: если я удалю репозиторий JPA из вызова API, то сервлет Karate Mock Servlet отлично работает без запущенного сервера, и тест Karate проходит успешно.

Есть идеи, как бы я это сделал? Если кто-то может указать мне правильное направление, я был бы признателен.


person joe    schedule 11.03.2020    source источник


Ответы (1)


Добавьте методы в MockDemoConfig, которые будут возвращать экземпляры Службы и Репозитория. Вы можете видеть, что Spring пытается выполнить автоматическое подключение, но не может найти компоненты.

Из-за всей «магии», которую выполняет Spring Boot, вам нужно будет точно выяснить, как вручную создать экземпляры таких вещей, как DataSource, от которого может зависеть Репозиторий. К сожалению, это выходит за рамки моей компетенции. Если у вас есть некоторые знания Spring, вы сможете быстро это понять - или в тестовых библиотеках Spring Boot может быть вспомогательная / тестовая аннотация.

Один намек, возможно, ответ заключается в @SpringBootTest и друзья - и вы, возможно, сможете автоматически подключить Сервис к вашему тест-классу JUnit. Тогда это может быть простой вопрос использования некоторого синглтона Java, на который вы можете получить ссылку в своем karate-config.js, а затем взять его оттуда.

person Peter Thomas    schedule 11.03.2020
comment
Спасибо, Питер. Я понял, что мне нужна фиктивная реализация. Я просто искал пример, что делать. - person joe; 12.03.2020