在单体 SpringBoot 应用程序中创建集成测试

2023-12-09

我被要求为一个非常大的 SpringBoot 项目中的一个服务创建一个集成测试,该项目产生了数十个已实现的服务。执行应用程序时,会部署所有这些服务 - 我想避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我(还)没有像我希望的那样有足够的 Spring Boot 测试经验,因此我想知道解决这个问题的最佳方法是什么。

我正在考虑用注释所有不相关的服务@MockBean注释和所有相关的@Autowire在测试类中,但我不确定这是否是正确的方法。有人能指出我正确的方向吗?

谢谢。


答案很大程度上取决于集成测试的范围。我将尝试介绍两种主要方法,您可以在谷歌上搜索更多示例和详细信息。Spring Boot 测试文档也是你的朋友。

Slices

Spring Boot 提供了名为slices。例如,有一个用于测试控制器的切片 -@WebMvcTest- 此测试将加载从 HTTP 和指定控制器调用应用程序的所有配置(@WebMvcTest(YourController.class))。之后,您需要决定如何处理该控制器的依赖项。

You can:

  • 嘲笑他们@MockBean.
  • 提供真实的实现(或附加配置)@Import(然后你必须再次处理新导入的依赖项的依赖项)。
  • 加载 Spring Boot 自动配置的附加部分。这可以使用以下方法完成@AutoConfigureSomething注释。 - 所有切片基本上都是自动配置注释的组合,您可以自由地将它们添加到您的测试中。例如看看DataJpaTest 上的注释了解如何添加使用测试数据库设置 Spring Boot Data JPA 的功能。

每个测试最多可以有一个切片,但您可以导入任意数量的附加服务、配置、模拟、自动配置等。重点是 - 您选择为测试配置的内容;具有新依赖项的新的不相关服务不应破坏现有测试。

SpringBoot测试

另一种方法是@SpringBootTest注释 - 这是相反的方向 - 默认情况下它加载所有内容,你可以排除你不想要的东西@MockBean, @EnableAutoConfiguration(exclude=SomeClass) etc.

添加新服务时当然存在破坏现有测试的危险。 - 这种情况应该不会经常发生,因为所有内容都是自动配置的,但它仍然是可能的,特别是在具有更多配置的整体中。

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

在单体 SpringBoot 应用程序中创建集成测试 的相关文章

随机推荐

  • 如何将数组存储为 Perl 散列中的值?

    我正在尝试在 Perl 中创建一个散列 其值是数组 就像是 my array split 1 2 my hash a gt array 令人惊讶的是 这个报告 使用 Data Dumper VAR1 a gt 1 2 gt undef 这一
  • Firebase 或 SQLite [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是 Android 开发新手 目前正在开发一个使用 SQLite 作为数据库的应用程序 问题是 我想与使用该应用程序的其他人共享信息 据我所知 单
  • 如何推迟内联Javascript?

    我有以下 html 代码
  • 停止模式 UIViewController 旋转

    模态UIViewController的父级自动旋转 但是当模态 VC 启动时 我只希望它以纵向显示而不是可旋转 我试过简单地返回 NOshouldAutorotate 在模态VC中 但没有欢乐 支持 iOS 5 非常感谢任何帮助 基本上 如
  • 如何创建类似于 Xcode 属性面板的选项卡式面板

    我正在尝试创建一个类似于 Xcode 属性面板的选项卡式面板 但标准选项卡式面板似乎具有不同的外观和感觉 无法更改它 应使用哪些控件来创建外观相似的选项卡式面板 编辑 我没有使用 NSTabViewController 只是有 TabVie
  • Mongo 用户定义函数和 MapReduce

    mongodb 有没有办法创建用户定义的 Javascript 函数 我在客户端有几个 Map Reduce 函数 我想在其他 MR 函数中使用它们 例如 多个 MR 函数可以计算各种平均值 我希望能够像这样使用它们 function re
  • TypeScript 装饰器和循环依赖

    考虑使用装饰器的相互依赖代码示例 如下 现在考虑以下工作流程 是的 我确实想传递实际导出的类 因为我稍后需要使用它们 应用程序导入并运行Parent ts Test Child 导致应用程序导入Child ts装修时 注 班级Parent代
  • 合并来自 git 存储库外部的更改

    我正在与该国另一边的另一位开发人员合作 他是我们项目的负责人 并且没有使用正式的版本控制系统 就我而言 我正在 git 中跟踪我的所有代码 我最近开始为主项目做出贡献 并且也希望能够跟踪其他开发人员的更新 当我收到他更新的代码时 它通常是
  • 在应用 LIMIT 之前获取结果计数的最佳方法

    当对来自数据库的数据进行分页时 您需要知道将有多少页来呈现页面跳转控件 目前我通过运行查询两次来做到这一点 一次包装在count 确定总结果 第二次应用限制以仅返回当前页面所需的结果 这看起来效率很低 有没有更好的方法来确定之前会返回多少结
  • opencv中的缩放和旋转模板匹配

    I want to use a template image to search target in the another image But the target have scale and rotation change also
  • 使用 jquery 预加载图像数组

    我正在使用 jQuery 从 php 数组构建图像数组 我想循环浏览这些图像 预加载它们 同时显示一些加载 gif 直到加载所有图像 目前 我已经尝试了很多方法来这样做 页面的其余部分似乎总是在继续加载 因此图像正在被预加载 但不是在页面加
  • ApplicationInsights OperationId 为空

    我正在实现自定义 ApplicationInsights 记录器 并且能够在跟踪 异常和请求等写入位置写入所有日志 但跟踪和异常中的 OperationId 为空 昨天我使用相同的代码并在所有表中获取OperationId 之后我玩了多线程
  • Rails 从 JSON 数组中选择

    我有一个从 Foursquare 返回的 JSON 数组 我们就这样称呼它吧 venues 我希望能够通过下拉框 选择 场地 并且我希望它成为表单的一部分 这意味着我希望能够按名称选择特定场地 即本例中为 Hotel Utah Saloon
  • 关于使用 Installshield 2013 (.issuite) 项目文件生成的 Setup.exe 进行静默安装

    我有一个使用 installshield 套件项目 issuite 文件生成的 setup exe 文件 对于具有足够权限的管理员或普通用户 我们的 IT 管理员之一可以使用以下命令进行静默安装 setup exe silent 但是 当尝
  • 按本地化排序列表

    我需要排序一个List
  • 通过jquery获取对象数组的索引

    我有以下数组 var array id aa description some description id bb description some more description id cc description a lot of d
  • 在 OSX Yosemite 上的 Emacs 中使用 LLVM 调试器

    我想知道是否可以将 LLVM 调试器与 Emacs 一起使用 例如M x gdb接口标准 提前致谢 令人惊讶的是 向 Emacs 添加 LLVM 调试器支持是有争议的 或者没有争议 取决于您的愤世嫉俗程度 2015年2月 理查德 斯托曼写道
  • 操作系统导致的 irq 延迟是多少?

    如何估计 ARM 处理器上的 irq 延迟 irq 延迟的定义是什么 中断请求 irq 延迟是中断请求从中断源传输到被服务点所需的时间 因为有不同的中断通过不同的路径来自不同的源 显然它们的延迟取决于中断的类型 您可以找到有关特定中断的延迟
  • web.config 中的 C# 命名空间

    来自 VB 背景并被迫学习 C 的我遇到了第一个障碍 在 VB 中 我可以将我想要在整个应用程序中可用的所有命名空间放入 web config 文件中 并且它将在每个代码隐藏文件中可用 而无需添加导入语句
  • 在单体 SpringBoot 应用程序中创建集成测试

    我被要求为一个非常大的 SpringBoot 项目中的一个服务创建一个集成测试 该项目产生了数十个已实现的服务 执行应用程序时 会部署所有这些服务 我想避免部署与我正在为其创建测试的服务无关的所有服务 不幸的是 我 还 没有像我希望的那样有