Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

mockito - How to spy a CDI bean in Arquillian test

In my former Spring development, it is easy to spy a Spring bean via @SpyBean or Mockito spy method, and do some stubbing and verifying it in the testing codes.

But when I tried to do the same steps in Arquillain test for Jakarta EE applications, it does not work as expected.

@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));
 
}

There is no interactions of mocked/spyed object at all.

question from:https://stackoverflow.com/questions/65855904/how-to-spy-a-cdi-bean-in-arquillian-test

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

There is an Arquillian extension for this purpose: https://github.com/topikachu/arquillian-extension-mockito/

Assuming Maven:

<dependency>
  <groupId>org.jboss.arquillian.extension</groupId>
  <artifactId>arquillian-mockito</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <scope>test</scope>
</dependency>

You can then use the extension's @Spy annotation to spy on the service:

@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));
 
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...