ReleaseMessageScanner implements InitializingBean { public void addMessageListener(ReleaseMessageListener listener) { if (!listeners.contains(listener)) { listeners.add(listener); } } ReleaseMessageScanner(); @Override void afterPropertiesSet(); void addMessageListener(ReleaseMessageListener listener);  }
@Test public void testScanMessageAndNotifyMessageListener() throws Exception { SettableFuture<ReleaseMessage> someListenerFuture = SettableFuture.create(); ReleaseMessageListener someListener = (message, channel) -> someListenerFuture.set(message); releaseMessageScanner.addMessageListener(someListener); String someMessage = "someMessage"; long someId = 100; ReleaseMessage someReleaseMessage = assembleReleaseMessage(someId, someMessage); when(releaseMessageRepository.findFirst500ByIdGreaterThanOrderByIdAsc(0L)).thenReturn( Lists.newArrayList(someReleaseMessage)); ReleaseMessage someListenerMessage = someListenerFuture.get(5000, TimeUnit.MILLISECONDS); assertEquals(someMessage, someListenerMessage.getMessage()); assertEquals(someId, someListenerMessage.getId()); SettableFuture<ReleaseMessage> anotherListenerFuture = SettableFuture.create(); ReleaseMessageListener anotherListener = (message, channel) -> anotherListenerFuture.set(message); releaseMessageScanner.addMessageListener(anotherListener); String anotherMessage = "anotherMessage"; long anotherId = someId + 1; ReleaseMessage anotherReleaseMessage = assembleReleaseMessage(anotherId, anotherMessage); when(releaseMessageRepository.findFirst500ByIdGreaterThanOrderByIdAsc(someId)).thenReturn( Lists.newArrayList(anotherReleaseMessage)); ReleaseMessage anotherListenerMessage = anotherListenerFuture.get(5000, TimeUnit.MILLISECONDS); assertEquals(anotherMessage, anotherListenerMessage.getMessage()); assertEquals(anotherId, anotherListenerMessage.getId()); }