Мокито с JavaMailSender - PullRequest
       4

Мокито с JavaMailSender

0 голосов
/ 23 марта 2020

Мой тест не пройден, это мой класс тестирования.

public class EmailGeneratorServiceTests {

    @Mock
    JavaMailSender javaMailSender;

    EmailGeneratorService emailGeneratorService;

    @Before
    public void before() {
        MockitoAnnotations.initMocks(this);
        emailGeneratorService = new EmailGeneratorService(javaMailSender);
    }


    @Test
    public void generateAndSendMessageSuccess() throws MessagingException, IOException {
        String email = "test@test.com";
        String body = "Some contents.";
        String subject = "Some subject";
        emailGeneratorService.generateAndSendMessage(email, body, subject);
        List<Message> inbox = Mailbox.get(email);
        //inbox.size === 0
        assertTrue(inbox.size() == 1);
        assertEquals(subject, inbox.get(0).getSubject());
        assertEquals(body, inbox.get(0).getContent());
    }
}

Когда я вызываю inbox.size (), я получаю 0, но ожидается 1. Сервер - smtp.

This это EmailGeneratorService.

@Service
public class EmailGeneratorService {
    SimpleMailMessage simpleMailMessage;
    JavaMailSender javaMailSender;

    @Autowired
    public EmailGeneratorService(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
        this.simpleMailMessage = new SimpleMailMessage();
    }

    public void generateAndSendMessage (String email, String messageBody, String subject) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setTo(email);
        simpleMailMessage.setText(messageBody);
        simpleMailMessage.setSubject(subject);
        javaMailSender.send(simpleMailMessage);
    }
}

Пожалуйста, напишите, что не так, и объясните, что случилось.

1 Ответ

0 голосов
/ 23 марта 2020

Вы должны захватить 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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...