Czy jest możliwe szpiegować dwie wstrzyknięte zależności do tej samej, testowanej klasy?
Pytanie bierze się z pewnego problemu. Mam taką prostą klasę, z dwiema zależnościami:
@Service
@Singleton
@MessageReceiver
public class LinkHitCallbackEventHandler {
public static final Logger logger = LogManager.getLogger();
@Inject
private CallbackInvocationBuilder callbackInvocationBuilder;
@Inject
private CallbackLogBuilder callbackLogBuilder;
@MessageReceiver
public void handle(@SubscribeTo LinkHitEvent event) {
Entity<Form> entity = EntityFormFactory.createFromEvent(event);
this.callbackLogBuilder.build(entity);
Response response = this.callbackInvocationBuilder.post(entity);
}
}
Testuję ją w taki sposób:
@Test
public void send_callback_after_event_is_published() {
target("/testY")
.property("jersey.config.client.followRedirects", false)
.request()
.header("User-Agent", UserAgentMother.allowedUserAagent())
.get();
verify(callbackInvocationBuilder).post(anyObject());
// verify(callbackLogBuilder).build(anyObject());
}
W ten sposób przechodzi pomyślnie, ponieważ najpierw wywołuję callbackLogBuilder.build(entity)
.
Jeśli zamienię wywołania miejscami i najpierw wywołam callbackInvocationBuilder.post(entity)
, test zakończy się niepowodzeniem.
Zarówno callbackLogBuilder, jak i callbackInvocationBuilder są zdeklarowane jako Mockito.spy(). Konfiguruję je w configure() z JerseyTest. Obie dokładnie w ten sam sposób.