2016-06-28 3 views
0

이메일 전송을위한 통합 테스트를 작성하도록 도와주세요. inreal은 이메일을 전송합니다. 우리는 당신의 JavaMailSender를 구성하는 방법을 알 필요가이메일 보내기 통합 테스트

public class MailSenderServiceIT extends BaseServiceIntegrationTest { 

@Autowired 
private MailSenderService mailSenderService; 

@Test 
public void sendEmail() { 
    mailSenderService.sendEmail("[email protected]", "[email protected]", "Test Subject", 
      "Test Body"); 
    flushAndClear(); 
} 

답변

0

:

public interface MailSenderService { 

void sendEmail(String to, String from, String subject, String body); } 

메일 보낸 사람 클래스 드디어

@Service 
public class MailSenderServiceImpl implements MailSenderService { 
private static final Logger logger = LoggerFactory.getLogger(MailSenderServiceImpl.class); 

@Autowired 
private JavaMailSender javaMailSender; 

@Autowired 
Configuration freemarkerConfiguration; 

private SimpleMailMessage composeMail(String to, String from, String subject, String body) { 
    SimpleMailMessage message = new SimpleMailMessage(); 
    message.setFrom(from); 
    message.setTo(to); 
    message.setSubject(subject); 
    message.setText(body); 
    return message; 
} 

@Override 
public void sendEmail(String to, String from, String subject, String body) { 
    sendMessage(composeMail(to, from, subject, body)); 
} 

@Async 
private void sendMessage(SimpleMailMessage message) { 
    Assert.notNull(javaMailSender, "Email Sender must not be null"); 
    javaMailSender.send(message); 
}} 

그리고는 통과하지 않는 통합 테스트입니다. 통합 테스트에서 전자 메일을 보내려면 JavaMailSender가 로컬 구성을 사용하도록 구성해야합니다. 5555 : : 예를 들어, 로컬 호스트에 의해

JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); 
javaMailSender.setHost("localhost"); 
javaMailSender.setPort(5555); 

그런 다음, 당신은 당신의 테스트에 직접 라이브러리 subethasmtp을 사용하여 서버의 SMTP를 만들 수 있습니다. smtp.host = SMTP :

@Rule 
public SMTPServerRule smtpServerRule = new SMTPServerRule("localhost", 5555); 

@Test 
public void sendEmail() { 
    mailSenderService.sendEmail("[email protected]", "[email protected]", "Test Subject", "Test Body"); 
    flushAndClear(); 

    List<WiserMessage> messages smtpServerRule.getMessages(); 
} 
+0

내가 보내는 메일 이러한 속성을 사용 : 그래서

public class SMTPServerRule extends ExternalResource { private Wiser wiser; private String hostname; private int port; public SMTPServerRule() { this(25); } public SMTPServerRule(int port) { this("localhost", port); } public SMTPServerRule(String hostname, int port) { this.hostname = hostname; this.port = port; } @Override protected void before() throws Throwable { super.before(); wiser = new Wiser(port); wiser.setHostname(hostname); wiser.start(); } public List<WiserMessage> getMessages() { return wiser.getMessages(); } @Override protected void after() { super.after(); wiser.stop(); } } 

는, 당신은 당신의 통합 테스트에 그런 일을 수행 할 수 있습니다 나는 PERSONNALY 것을 할 수있는의 JUnit 규칙을 만들 .gmail.com smtp.port = 587 [email protected] smtp.password = aaa12345678 $ – Mary

+0

테스트 실행 중 MailAuthenticationException이 발생합니다. – Mary