使用 QuarkusMock 模拟依赖 bean?

问题描述 投票:0回答:2

我有一个

@QuarkusTest
,我想在其中测试我注入的服务(我们称之为
ServiceA
)。 该服务具有依赖性(我们称其为
EventX
,并用
@Dependent
(javax.enterprise.event.Event) 进行注释) 正如经验和文档中所述,
@QuarkusMock
不支持这一点。 (额外问题:到底为什么会这样?)

所以我尝试了以下方法,尽管这不是一个好的方法,因为我改变了 bean 的实际状态:

@QuarkusTest
class Test{
  @Inject
  ServiceA serviceA;

  @Inject
  Event<X> eventX;

  @BeforeEach
  void setup(){
    serviceA.eventX = spy(eventX);
    doReturn(true).when(eventX).doSomething();
  }
}

当我现在在

serviceA
上运行测试时,eventX 似乎被原始 bean 覆盖。我认为这是因为 cdi 懒惰造成的。

有没有一种方法,我可以以干净的方式模拟或监视

@Dependent
bean,而不会过多地干扰上下文?

java testing mocking quarkus
2个回答
0
投票

根据

documentation
本身,用范围
@Singleton
@Dependent 注释的 Bean 不能用 QuarkusMock 进行模拟,因为它们是“伪范围的”。

A

@RequestScoped
应该对您的需求有用,对吗?


0
投票

我对 @Dependent 类也有同样的问题,并使用 Mockito 解决了它,并且没有使用 @Inject。

private Event<X> eventX;

@BeforeEach
  void openMocks() {
    eventX = Mockito.mock(Event.class);
}
© www.soinside.com 2019 - 2024. All rights reserved.