@Test public void onErrorAndGetMailStatusResult() throws Exception { MemoryMailListener listener = this.mocker.getComponentUnderTest(); String batchId = UUID.randomUUID().toString(); UUID mailId1 = UUID.randomUUID(); UUID mailId2 = UUID.randomUUID(); MimeMessage message1 = mock(MimeMessage.class); when(message1.getHeader("X-BatchID", null)).thenReturn(batchId); when(message1.getHeader("X-MailID", null)).thenReturn(mailId1.toString()); when(message1.getHeader("X-MailType", null)).thenReturn("mailtype1"); listener.onError(message1, new Exception("error1"), Collections.<String, Object>emptyMap()); MimeMessage message2 = mock(MimeMessage.class); when(message2.getHeader("X-BatchID", null)).thenReturn(batchId); when(message2.getHeader("X-MailID", null)).thenReturn(mailId2.toString()); when(message2.getHeader("X-MailType", null)).thenReturn("mailtype2"); listener.onError(message2, new Exception("error2"), Collections.<String, Object>emptyMap()); Iterator<MailStatus> results = listener.getMailStatusResult().getByState(MailState.FAILED); assertTrue("These should be mails in error!", results.hasNext()); MailStatus status = results.next(); assertEquals("Exception: error1", status.getErrorSummary()); assertTrue(status.getErrorDescription().contains("error1")); assertEquals(batchId, status.getBatchId()); assertEquals(mailId1.toString(), status.getMessageId()); assertEquals("mailtype1", status.getType()); status = results.next(); assertEquals("Exception: error2", status.getErrorSummary()); assertTrue(status.getErrorDescription().contains("error2")); assertEquals(batchId, status.getBatchId()); assertEquals(mailId2.toString(), status.getMessageId()); assertEquals("mailtype2", status.getType()); assertFalse(results.hasNext()); }