У меня есть класс вроде:
public class StarshipEmailSender {
@Value("${email.from-email-address:}")
String from;
@Value("${email.from-name:}")
private String fromName;
@Value("${email.smtp.credentials-path:}")
String credentialPath;
@Value("${email.smtp.host:}")
String smtpHost;
@Value("${email.smtp.port:587}")
private int smtpPort;
@Autowired
private AClientFactory clientFactory;
private Properties sessionProperties;
private String smtpUsername = null;
private String smtpPassword = null;
public StarshipEmailSender() {
sessionProperties = new Properties();
sessionProperties.put("mail.transport.protocol", "smtp");
sessionProperties.put("mail.smtp.port", smtpPort);
sessionProperties.put("mail.smtp.starttls.enable", "true");
sessionProperties.put("mail.smtp.auth", "true");
}
public void sendMail(List<String> to, String subject, String contentType, String body)
throws MessagingException, UnsupportedEncodingException {
Session session = Session.getDefaultInstance(sessionProperties);
MimeMessage msg = contructMIMEMessage(session, to, subject, contentType, body);
Transport transport = session.getTransport();
try {
long start = System.currentTimeMillis();
transport.connect(smtpHost, smtpPort, smtpUsername, smtpPassword);
transport.sendMessage(msg, msg.getAllRecipients());
log.info("Email sent to : " + to + " in " + (System.currentTimeMillis()-start) + " millis");
} finally {
transport.close();
}
}
MimeMessage contructMIMEMessage(Session session, List<String> to, String subject, String contentType,
String body) throws UnsupportedEncodingException, MessagingException {
// code to construct a mime message ...
}
}
Как мне выполнить модульное тестирование метода sendMail()
? У него есть много переменных, которые объявлены внутри метода, и я не могу высмеять их из тестового класса: / Я высмеял все другие методы, потому что они были проще, но этот метод меня смущает. Или я плохо сконструировал этот класс, который не допускает гибкости для модульного тестирования?