如何从测试中排除@EnableJpaRepositories?

2024-01-25

我有一个主@SpringBootApplication它需要扫描特定的包才能启用 JPA 存储库,所以我使用@EnableJpaRepositories来指定这一点。现在我正在实现单元测试,我只想测试控制器组件,所以我按照他们使用的官方文档中的教程进行操作@WebMvcTest(MyController.class)测试具有服务依赖性的控制器。 问题是这对我不起作用,因为它试图加载我在主 Spring Boot 应用程序中指定的 JpaRepositories(当我评论@EnableJpaRepositories在主类中测试运行没有问题)。

我猜我需要为测试类创建一个特定的配置,这样它就可以忽略主要配置(因为我只想加载控制器并模拟服务层),但我不知道如何创建这样的配置。我尝试添加一个空配置,但它仍然失败并出现相同的错误:

@TestConfiguration
static class TestConfig {}

这是我得到的错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'failureTaskHandler': Unsatisfied dependency expressed through field 'myManager'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'msgManager': Unsatisfied dependency expressed through field 'inboundManager'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'inboundManager': Unsatisfied dependency expressed through field 'messageRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageRepository' defined in com.example.MessageRepository defined in @EnableJpaRepositories declared on MonitorApplication: Cannot create inner bean '(inner bean)#45e639ee' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#45e639ee': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

还有我的测试课:

@WebMvcTest(MyController.class)
public class MyControllerTest {

  @Autowired private MockMvc mvc;

  @MockBean private MyService service;


  // Tests here

  // @Test
  // public void...


}

我的控制器类:

@RestController
@CrossOrigin
@RequestMapping("/api")
@Slf4j
public class MyController {

  @Autowired private MyService service;

  @PostMapping(value = "/search", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
  public @ResponseBody SearchResponse getOrders(@RequestBody SearchRequest orderSearchRequest) {
    log.info("Receiving orders request...");
    return service.getOrders(orderSearchRequest);
  }

}

快速解决方案

Remove @EnableJpaRepositories来自您的 Spring Boot 应用程序类。使用:

@SpringBootApplication
public class MainApplication { 

}

代替

@SpringBootApplication
@EnableJpaRepositories
public class MainApplication { 

}

在这种情况下,Spring Boot 将在类路径上找到 Spring Data JPA,并使用自动配置来扫描存储库中的包。

Use @EnableJpaRepositories扫描特定包

使用@NikolaiShevchenko 解决方案(这是不正确的)与单独的配置,但没有显式导入它,通过@Import({ DataConfiguration.class }),(因为测试也将显式导入配置)并让 Spring Boot 在包扫描期间找到您的配置。

@SpringBootApplication
public class MainApplication { 

}

@Configuration
@EnableJpaRepositories(basePackages = "com.app.entities")
public class JpaConfig {

}

重要的

不要忘记添加basePackages属性,如果您将配置放在单独的包中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从测试中排除@EnableJpaRepositories? 的相关文章

随机推荐

  • 无法在 ASP.Net vNext 项目中使用会话

    我有一个使用 Session 的 ASP Net vNext 项目 但是我在尝试在会话中获取 设置值时收到此错误 Microsoft AspNet Http Core dll 中发生 System InvalidOperationExcep
  • 将图像添加到 jar 中

    我想为我的 JFrame 设置图标 我执行以下操作 Image icon Toolkit getDefaultToolkit getImage src images icon jpg this setIconImage icon 当我从 n
  • 从 C 静态库中删除内部符号

    我正在研究一些作为静态库提供的嵌入式代码 我们希望从库中删除所有内部符号 只保留 API 符号可见 这是我们想要做的一个示例 假设您有一个名为internal c和一个叫api c看起来像这样 internal c int fibonacc
  • 检查文件是否存在 Objective-C

    我使用下面的代码来检查文件是否存在 bool b NSFileManager defaultManager fileExistsAtPath filePath 这些代码可以在 IOS 上运行 但是当我将它迁移到 mac os x 时 但我通
  • 是否有关于如何命名资源的约定?

    Android 中是否有命名资源的约定 例如 按钮 文本视图 菜单等 Android SDK 将是一个很好的起点 例如 我尝试在活动中确定 ID 的范围 如果我有一个ListView它只是 android id list在所有活动中 但是
  • 将 KeyFilter 与 ASP.NET Core 2.0 结合使用

    我在简单的 ASP NET Core 2 0 WebAPI 应用程序中使用 KeyFilter 属性时遇到问题
  • 使用 ffmpeg 分割成相等的部分并转换许多 mp4 视频

    我有大量视频需要使用 ffmpeg 将 mp4 转换为 wmv 并将每个文件分成 10 分钟的片段 但我是一个 cmd 脚本新手 事实上 我是一个脚本新手 在花了六个小时试图找到答案之后 我想我会把它带给你们 我的代码可以运行一点 但我需要
  • aurelia - 示例,安装依赖项时出错

    我一直在关注 Aurelia 网站上的示例以及以下示例 http aurelia io hub html doc article aurelia framework latest contact manager tutorial 2 htt
  • 使用图像作为 JPanel 和 JButton 的背景

    我正在尝试使用在 Photoshop 中制作的图像作为 GUI 的背景 我怎么做 我还制作了一些图像 我想在执行操作后在按钮背景中显示 对于 JButton 请使用以下命令 JButton button new JButton Button
  • 如何检测/处理弯曲区域上的触摸事件?

    我从一个本机 iPad 应用程序开始 如果需要 我们可以假设 iOS 4 3 我需要有一系列相互碰撞的弯曲区域 我希望得到一些有关处理此问题的最佳方法的建议 我的一个想法是使用 WebView 并且只有一个 JPG 和一个 HTML 图像映
  • rdf:Bag、rdf:Seq 和 rdf:Alt 在使用时有何不同?

    我正在读RDF 模式 1 1 http www w3 org TR rdf schema ch bag建议 其中包括以下内容 强调是后加的 5 1 2 rdf 袋子 http www w3 org TR rdf schema ch bag
  • 机器人可以到达点 (x, y) 吗?

    我在一次求职面试中遇到了这个问题 我无法找到解决方案的正确算法 所以我在这里发布这个问题 有一个机器人可以通过以下两种方式在坐标平面上移动 假设机器人当前位置为 x y 如果方向如下 则机器人可以移动等于 x 和 y 之和的距离 x y g
  • mp3 的

    首先这是我当前正在编码的网站 http www clairereviens com http www clairereviens com 每个按钮上都有一个 mp3 样本的标签 所有 mp3 在 Safari 中都能完美播放 但在 Chro
  • Jenkinsfile windows cmd输出变量参考

    我对 groovy 还很陌生 在我的Jenkinsfile我试图将 Windows cmd 输出存储在变量中 在下一个命令中使用它 但似乎没有任何效果 这是我得到的最接近的 pipeline agent any stages stage p
  • UTF16(例如 Wide-winapi 函数使用的)字符是否始终为 2 字节长?

    请帮我解释一下 UTF16 是如何工作的 考虑到以下几点 我有点困惑 There is a static type in C WCHAR which is 2 bytes long always 2 bytes long obvisouly
  • 将 SVG 转换为 PNG 并调整其大小

    我正在尝试将 SVG 转换为 PNG 或任何光栅格式 并同时调整大小 我以为我会使用 ImageMagick 来完成此任务 但它似乎在调整大小之前转换为光栅 这会导致图像质量较差 有没有办法让 ImageMagick 在转换为光栅之前调整
  • 手臂;内联汇编;使用暂存寄存器;

    内联汇编程序存在一些我无法理解的问题 我有一个带有内联汇编器的函数 在 ASM 块内部 我需要使用一些暂存寄存器来修改一些系统值 void setHW uint32 t val asm volatile mrc 15 0 r0 orr r0
  • 错误字符串编码(Windows 10 + Visual Studio 2015 + Net 4.6)

    My code Keys new Dictionary
  • 非捕获通用 lambda 是否应该衰减为函数指针?

    考虑以下代码 int main auto l auto void p int l 两者都可以很好地工作GCC https godbolt org g wSibNo and clang https godbolt org g OUnVqp 让
  • 如何从测试中排除@EnableJpaRepositories?

    我有一个主 SpringBootApplication它需要扫描特定的包才能启用 JPA 存储库 所以我使用 EnableJpaRepositories来指定这一点 现在我正在实现单元测试 我只想测试控制器组件 所以我按照他们使用的官方文档