【问题标题】:How to mock a JPA repo in a Karate Mock Servlet Config? [duplicate]如何在空手道模拟 Servlet 配置中模拟 JPA 存储库? [复制]
【发布时间】:2020-03-11 16:11:16
【问题描述】:

我有一个带有 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 可以在服务器不运行且空手道测试成功通过的情况下正常工作。

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

【问题讨论】:

    标签: spring-boot spring-mvc karate mockserver


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢彼得。我明白我需要一个模拟实现。我只是在寻找如何做的例子。
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2019-07-07
    相关资源
    最近更新 更多