当前位置: 首页 > 知识库问答 >
问题:

Quakus测试使用@QuakusTest,模拟和javax.enterprise.inject.实例

冀崇凛
2023-03-14

我们有一个使用javax的应用程序。企业注射实例来查找服务的所有验证程序。这似乎工作得很好,但在测试过程中,我们希望用一个mock替换其中的一些验证器,以跳过它们的行为,以便更容易找到其他验证器。

当我们尝试使用旧方法(参见博客)时,我们注意到只有带有@Mock的类被注入,而不是任何正常的类。

在尝试“新方法”时,我们得到了一个javax。企业注射含糊不清的解析异常告诉我们TypeBValidator被发现了两次。

这是我们应用程序精简版的设置,显示了以下行为:

  • 验证器-接口
  • TypeAValidator(@Application Scoped
  • TypeBValidator(@Application Scoped
  • REST-Service-class具有@Inject这样的:实例

在测试范围内,我们有:

  • TypeBMockValidator(旧方法中有@Mock,新方法中没有@Mock)

有关所有详细信息,请参见示例项目。

我正在寻找一种稳定和可预测的方法来在我的测试中只替换TypeBValidator。任何帮助都将受到高度赞赏。


共有1个答案

万俟沛
2023-03-14

原来这不是一个bug,而是当多个类有一个类层次结构,其中多个类是bean时CDI的预期行为。在这种情况下,最简单的解决方案是用@DefaultBean注释TypeBValidator

看见https://github.com/quarkusio/quarkus/issues/19773#issuecomment-909974623了解更多详细信息

 类似资料:
  • 简介 在 Laravel 应用程序测试中,你可能希望「模拟」应用程序的某些功能的行为,从而避免该部分在测试中真正执行。例如:在控制器执行过程中会触发事件(Event),从而避免该事件在测试控制器时真正执行。这允许你在仅测试控制器 HTTP 响应的情况时,而不必担心触发事件。当然,你也可以在单独的测试中测试该事件逻辑。 Laravel 针对事件、任务和 Facades 的模拟,提供了开箱即用的辅助函

  • #使用Mocks测试 在现实世界的应用程序中,我们的组件很可能具有外部依赖性。当为组件编写单元测试时,如果我们可以模拟这些外部依赖性,以使我们的测试仅依赖于被测试组件的行为,这将是理想的。 vue-loader提供了一个特性,它允许你使用inject-loader向*.vue组件注入任意依赖项。一般的想法是,不是直接导入组件模块,我们使用inject-loader为该模块创建一个“模块工厂”函数。

  • 如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需

  • 我正在试着用mockito测试我的缓存层。 我用的是这里描述的咖啡因 基本上,我有这个... 这工作得很好,方法被缓存并且工作得很好。

  • 出于学校目的,我正在创建一个使用股票API的应用程序。 我正在尝试为一种获取过去10年所有股票数据的方法编写一个测试。我不想实际获取所有这些数据,而是想抛出一个异常。 我想测试的方法: 股票时间系列(....)调用可以抛出阿尔法仓位异常。 我这样嘲弄了TimeSeries类: 在我的测试类中,我想模拟这个调用,并返回一个异常而不是实际数据。 无论我多么试图嘲笑这段代码,它永远不会抛出异常。它将始终

  • 我开始在我的项目中实践TDD,作为背景,它也包含遗留代码。我们使用Mockito作为一个模拟框架,并遵循Spring MVC方法。 有时,类用许多不同的对象作为属性实现。这些服务中有一些简单的方法,例如。 将使用许多对象来完成其职责 更新并保存事务 推进业务流程 关闭其他挂起的操作 但是,在执行这些操作时,该方法需要调用不同的来获取和更新事务、获取业务流程ID、获取挂起的事务(并保存其更新)。这意