Я пытаюсь написать тесты JUnit5 для Spring Email. Когда я запускаю тест, сервер Greenmail не получает никаких сообщений. Прикрепление фрагментов кода для того же самого:
@ExtendWith(MockitoExtension.class)
public class EmailServiceImplTest {
Mail emailEntity;
GreenMail serverA;
@InjectMocks
private EmailServiceImpl emailService;
@Mock
private JavaMailSender javaMailSender;
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
emailEntity = mockItemMasterData();
// Setup fake smtp server.
serverA = new GreenMail(ServerSetupTest.SMTP);
serverA.start();
}
private Mail mockItemMasterData() {
Mail mail = new Mail();
mail.setFrom("no-reply@test.com");
mail.setTo("no-reply@test.com");
mail.setSubject("Spring Mail Integration Testing with JUnit and GreenMail Example");
mail.setBody("We show how to write Integration Tests using Spring and GreenMail.");
mail.setSendDate(Date.from(Instant.ofEpochSecond(System.currentTimeMillis())));
return mail;
}
@Test
public void testSendEmailToAvailableMailboxReturnEmail() throws SendFailedException {
// Using javamailsenderimpl to send the mail.
emailService.sendSimpleMessage(emailEntity);
try {
Message[] messages = serverA.getReceivedMessages();
Assert.assertNotNull(messages);
Assert.assertEquals(1, messages.length);
Assert.assertEquals(emailEntity.getSubject(), messages[0].getSubject());
Assert.assertEquals(emailEntity.getBody(), String.valueOf(messages[0].getContent()).contains("body"));
} catch (MessagingException | IOException e) {
Assert.fail("Should be able to retrive sent mail.");
}
}
}
И вот класс, для которого я пишу этот тест
@Component
@Slf4j
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender javaMailSender;
@Override
public void sendSimpleMessage(Mail mail) throws SendFailedException {
log.info("Send mail started ");
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(mail.getTo());
message.setFrom(mail.getFrom());
message.setSubject(mail.getSubject());
message.setText(mail.getBody());
message.setSentDate(mail.getSendDate());
javaMailSender.send(message);
log.info("Send mail end ");
}
}
Ниже приведен источник теста yaml:
---
spring:
mail:
default-encoding: UTF-8
host: localhost
jndi-name:
username: username
password: secret
port: 2525
properties:
mail:
debug: false
smtp:
debug: false
auth: true
starttls: true
protocol: smtp
test-connection: false
Я могу отправить электронное письмо из EmailServiceImpl класса, но когда я пытаюсь запустить тест, я не получаю никаких сообщений.
Я попробовал все, но не получилось. Буду очень признателен за любую помощь.
Спасибо.