1

我有一个带有 REST 控制器、服务和 JPA 存储库的 spring boot 2.2.4 项目。我可以使用 karate mock servlet 为控制器和服务定义一个 mock,但我不知道要为存储库做什么。控制器@Autowired 服务。服务@Autowired 存储库。

结果,当我运行空手道测试时,我收到了这条消息:

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“repository.EmployeeRepository”类型的合格bean:预计至少有1个有资格作为自动装配候选者的bean。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

我正在使用的 MockServlet 正是来自演示的这个类: MockSpringMvcServlet

使用类似于此的 MockConfig 类: MockDemoConfig

最后, karate-config.js 文件以这种方式引导 MockSpringMvServlet(如 karate 演示代码中所示):


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

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

  return config;
}

注意:如果我从 API 调用中删除 JPA 存储库,那么 Karate Mock Servlet 可以在没有服务器运行的情况下正常工作,并且 Karate 测试成功通过。

知道我会怎么做吗?如果有人能指出我正确的方向,我将不胜感激。

4

1 回答 1

0

将方法添加到MockDemoConfig将返回服务和存储库的实例。您可以看到 Spring 正在尝试执行自动连接,但找不到 bean。

由于 Spring Boot 所做的所有“魔术”,您将需要准确地弄清楚如何手动实例化DataSource存储库可能依赖的东西。不幸的是,这超出了我的专业范围。如果您有一些 Spring 知识,您应该能够快速解决这个问题 - 或者 Spring Boot 测试库中可能有一个帮助器/测试注释。

一个提示可能是答案在于@SpringBootTest和朋友们——您也许能够将服务自动连接到您的 JUnit 测试类中。那么使用一些 Java 单例可能是一件简单的事情,您可以在您的中获取引用,karate-config.js然后从那里获取它。

于 2020-03-11T16:26:23.653 回答