Как смоделировать репозиторий JPA в Config Mock Servlet Karate? - PullRequest
1 голос
/ 11 марта 2020

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

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

Причина: org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет доступного квалифицирующего компонента типа 'repository.EmployeeRepository' : ожидается как минимум 1 бин, который считается кандидатом autowire. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = 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, то сервлет-каратэ отлично работает без запуска сервера, и тест каратэ проходит успешно.

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

1 Ответ

0 голосов
/ 11 марта 2020

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

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

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

...