2016-06-28 15 views
0

電子メールを送信するための統合テストを書いてください。インラインで電子メールが送信されます。ここEmail送信インテグレーションテスト

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); 
}} 

そして最後に合格しない統合テスト、次のとおりです。

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

私たちはあなたのJavaMailSenderを設定する方法を知っておく必要があります。統合テストで電子メールを送信する場合は、ローカル設定を使用するように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

関連する問題