@Test public void interceptorWithModifiedMessage() { ExecutorChannel channel = new ExecutorChannel(new SyncTaskExecutor()); channel.setBeanFactory(mock(BeanFactory.class)); channel.afterPropertiesSet(); MessageHandler handler = mock(MessageHandler.class); Message<?> expected = mock(Message.class); BeforeHandleInterceptor interceptor = new BeforeHandleInterceptor(); interceptor.setMessageToReturn(expected); channel.addInterceptor(interceptor); channel.subscribe(handler); channel.send(new GenericMessage<Object>("foo")); verify(handler).handleMessage(expected); assertEquals(1, interceptor.getCounter().get()); assertTrue(interceptor.wasAfterHandledInvoked()); }
@Test public void interceptorWithException() { ExecutorChannel channel = new ExecutorChannel(new SyncTaskExecutor()); channel.setBeanFactory(mock(BeanFactory.class)); channel.afterPropertiesSet(); Message<Object> message = new GenericMessage<Object>("foo"); MessageHandler handler = mock(MessageHandler.class); IllegalStateException expected = new IllegalStateException("Fake exception"); willThrow(expected).given(handler).handleMessage(message); BeforeHandleInterceptor interceptor = new BeforeHandleInterceptor(); channel.addInterceptor(interceptor); channel.subscribe(handler); try { channel.send(message); } catch (MessageDeliveryException actual) { assertSame(expected, actual.getCause()); } verify(handler).handleMessage(message); assertEquals(1, interceptor.getCounter().get()); assertTrue(interceptor.wasAfterHandledInvoked()); }