我有一个
@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,而不会过多地干扰上下文?
根据
documentation本身,用范围
@Singleton
或 @Dependent
注释的 Bean 不能用 QuarkusMock 进行模拟,因为它们是“伪范围的”。
A
@RequestScoped
应该对您的需求有用,对吗?
我对 @Dependent 类也有同样的问题,并使用 Mockito 解决了它,并且没有使用 @Inject。
private Event<X> eventX;
@BeforeEach
void openMocks() {
eventX = Mockito.mock(Event.class);
}