unit-testing - 在 Quarkus 中执行端点单元测试的最佳方法是什么?

标签 unit-testing junit quarkus quarkus-rest-client quarkus-panache

我对在 Quarkus 中执行单元测试的最佳方法有一些疑问。

一个选择是使用模拟,但我有一种感觉,使用模拟我只是“让测试覆盖率插件感到高兴”,但实际上我不会用这种方法测试任何东西。

另一个选择是使用真实的数据库,例如嵌入式 H2 数据库,但为此,我需要按顺序排列单元测试(插入、获取、更新、删除),有时我需要从另一个测试插入 ID例如,执行删除操作。有些复杂的实体会给插入或删除带来一些困难。因此,通过这种方法,我将失去单元测试的概念,因为我将失去测试的相互依赖性。

有人对这种情况有建议吗? 额外信息:我正在使用 Liquidbase、panacheEntity、junity。

最佳答案

看起来您正在寻找集成测试。我可能会选择以下选项:

  1. 根据数据库类型,您可以使用内存中的 h2,也可以使用 testcontainers用于外部服务。
  2. 有一般数据的sql测试启动脚本,小测试用例可以直接插入数据。
  3. 使用类似 http://rest-assured.io/ 的工具(通常包含在初始设置中)进行真正的 API 调用

如果您确实想要单元测试,在这种情况下,90% 的情况下您不需要数据库来测试功能。由于解耦,您可能将 Controller (资源)与服务分开。因此,在单元测试的情况下,我可能会选择:

  1. 如上所述,将逻辑从网络层中分离出来,以便任何请求处理和包装输出以满足客户端的需求都在逻辑层之外。如果可能的话,将逻辑本身分成更小的 block ,这将消除您对复杂数据的主要担忧
  2. 对于任何依赖项,override them with test beans ,或mock them using Mockito 。这对于持久性尤其重要,您需要模拟或伪造与数据库的任何连接,您不需要测试这部分,因为它通常由库处理。
  3. 您可以从文件中读取真正复杂实体的 JSON 对象
  4. 如果您确实需要坚持不懈,请查看此答案中的第一点。

所以感觉您想检查您的服务是否在更高级别上正确完成工作,这可能不是单元测试,希望答案会有所帮助

关于unit-testing - 在 Quarkus 中执行端点单元测试的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510701/

相关文章:

unit-testing - 如何测试或描述无穷无尽的可能性?

unit-testing - Grails电子邮件插件单元测试

eclipse - 如何在Eclipse中选择或更改JUnit版本?

java - 测试一个向前重定向的无效方法

java - 如何在 Quarkus 中禁用安全性

c++ - 重构模板类,使用它的嵌套类作为另一个类的模板参数

unit-testing - 将 Rewire 与 TypeScript 结合使用

java - JUnit4 : Test a shutdown hook is called

gradle - Quarkus 依赖注入(inject)因 Gradle 库模块中的 bean 失败

java - Quarkus、PanacheEntity 和保存列表或集