Можно ли внедрить шпиона для двух зависимостей в тестируемый класс? У меня есть этот класс:
@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);
}
}
Важно, что это простой класс с двумя внедренными зависимостями: callbackInvocationBuilder и callbackLogBuilder .
Я тестирую вызовы к этим зависимостям следующим образом:
@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());
}
Это соглашение проходит тест, потому что я сначала вызываю callbackLogBuilder.build(entity)
.
Если я поменяю местами вызовы и сначала вызову их callbackInvocationBuilder.post(entity)
, тест не пройден.
И callbackLogBuilder, и callbackInvocationBuilder являются шпионами. Я настраиваю их в configure () из JerseyTest. Точно так же.