Вы должны захватить JavaMailSender
, чтобы получить аргумент и подтвердить его.
ArgumentCaptor<SimpleMailMessage> emailCaptor = ArgumentCaptor.forClass(SimpleMailMessage .class);
verify(javaMailSender, times(1)).send(emailCaptor.capture());
List<SimpleMailMessage> actualList = emailCaptor.getAllValues();
assertTrue(actualList.size() == 1);
assertEquals(subject, actualList.get(0).getSubject());
assertEquals(body, actualList.get(0).getContent());
и Пользователь ErrorCollector
, чтобы утверждать несколько значений, определите его перед @Before
методом, подобным этому:
@Rule
public ErrorCollector collector= new ErrorCollector();
, и в утверждении используйте это так:
collector.checkThat(getResult(), equalTo("ERROR!"));
Ваш тест должен быть таким:
public class EmailGeneratorServiceTests {
private static final String EMAIL = "test@test.com";
private static final String BODY = "Some contents.";
private static final String SUBJECT = "Some subject";
@Mock
private JavaMailSender javaMailSender;
private EmailGeneratorService emailGeneratorService;
@Rule
public ErrorCollector collector = new ErrorCollecto();
@Before
public void before() {
MockitoAnnotations.initMocks(this);
emailGeneratorService = new EmailGeneratorService(javaMailSender);
}
@Test
public void generateAndSendMessageSuccess() throws Exception {
// Arrange
emailGeneratorService.generateAndSendMessage(email, body, subject);
// Act
Mailbox.get(email);
// Assert
ArgumentCaptor<SimpleMailMessage> emailCaptor =
ArgumentCaptor.forClass(SimpleMailMessage .class);
verify(javaMailSender, times(1)).send(emailCaptor.capture());
List<SimpleMailMessage> actualList = emailCaptor.getAllValues();
collector.checkThat(actualList.size(), equalTo(1));
collector.checkThat(actualList.get(0).getSubject(), equalTo(SUBJECT));
collector.checkThat(actualList.get(0).getContent(), equalTo(CONTENT));
}
}