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

What is the best approach to perform endpoint's unit tests in Quarkus?

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

一个选项是使用模拟,但我觉得使用模拟我只是 "make happy" 测试覆盖率插件,但实际上我没有用这种方法测试任何东西。

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

有人对这种情况有什么建议吗? 额外信息:我正在使用 liquidbase、panache entity、junity。

您似乎在寻找集成测试。我可能会选择下一个选项:

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

如果你真的想要单元测试,在这种情况下,90% 的时间你不需要数据库来测试功能。由于解耦,您可能将控制器(资源)与服务分开。所以在单元测试的情况下,我可能会选择:

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

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