问题描述
在我之前的 Spring 开发中,很容易通过 @SpyBean
或 Mockito spy
方法窥探 Spring bean,并在测试代码中做一些存根和验证。
但是当我尝试在 Arquiillain 测试中对 Jakarta EE 应用程序执行相同的步骤时,它没有按预期工作。
@Inject CargoinspectionService cargoinspectionService;
@Test
public void testCargoWasHandled(){
var cargoinspectionServiceSpy = spy(cargoinspectionService);
donothing().when(cargoinspectionServiceSpy).inspectCargo(eq(new TrackingId("AAA")));
// some real actions.
verify(cargoinspectionServiceSpy,atLeastOnce()).inspectCargo(any(TrackingId.class));
}
根本没有模拟/监视对象的交互。
解决方法
为此目的有一个 Arquillian 扩展:https://github.com/topikachu/arquillian-extension-mockito/
假设 Maven:
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-mockito</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
然后您可以使用扩展程序的 @Spy
注释来监视服务:
@Inject @Spy CargoInspectionService cargoInspectionService;
@Test
public void testCargoWasHandled(){
doNothing().when(cargoInspectionService).inspectCargo(eq(new TrackingId("AAA")));
// some real actions.
verify(cargoInspectionService,atLeastOnce()).inspectCargo(any(TrackingId.class));
}