JavaMailテストツールのGreenMail
3414 ワード
現在の様々なMockフレームワークの運用がどんなに広くても、個人的にユニットテストを書くときは特にMockにうんざりしています.原因は以下の通りです. 1. Mockを使用するには、テスト実行プロセスではなく、テスト実装をテストしていることを意味するMockのすべての動作が必要です.これにより、再構築時に多くのテストコードを修正する必要があります.テストは入出力だけに注目すべきで、入出力が変わらない限り、テストに影響を与えるべきではありません. 2. コードの複雑さを増す. 3. Mockの場合、いくつかの実装を誤って遮断し、リスクを増加させる しかし、実際の開発作業では、WebServiceに依存したり、MQサービスに依存したり、Emailサーバに依存したりするなど、外部依存は避けられません.これらの外部サービスについては、MockサービスではなくStubサービスに傾いています.Stubサービスは、プログラムが本当に外部のサービスと対話しており、実際の状況に合っています.Stub WebサービスDreamHeadのMocoフレームワークを使います.MQサービスはActiveMQを使って一時的なMQサーバーを構築します.Emailは、GreeMailを使用して一時的なMailサーバを構築します.
JunitとGreenMail
自分のMailSenderをテストする場合は、まずgreen Mailをテスト依存に追加し、JunitテストのsetupとteardownでそれぞれMail Serverを起動して閉じるとします.コードは次のとおりです.
実装コードは次のとおりです.
GreenMailはまた、メッセージがユーザーに送信されたことを検証することをサポートしています.上記の実装では、ユーザーに送信する必要があります[email protected]は、次のコードで検証できます.
より多くの使い方、公式サイトに参加します:
http://www.icegreen.com/greenmail/
JunitとGreenMail
自分のMailSenderをテストする場合は、まずgreen Mailをテスト依存に追加し、JunitテストのsetupとteardownでそれぞれMail Serverを起動して閉じるとします.コードは次のとおりです.
public class MyMailSenderTest {
private MyMailSender mailSender;
private GreenMail mailServer;
@Before
public void setUp() throws Exception {
mailServer = new GreenMail(new ServerSetup(12000, null, "smtp"));
mailServer.start();
mailSender = new MyMailSender("localhost", 12000);
}
@After
public void tearDown() throws Exception {
mailServer.stop();
}
@Test
public void shouldSendEmailToServer() throws Exception {
mailSender.sendEmail("Unit Test for java mail Demo");
String receivedMessage = (String) mailServer.getReceivedMessages()[0].getContent();
assertThat(receivedMessage.trim(), equalTo("Unit Test for java mail Demo"));
}
}
実装コードは次のとおりです.
public class MyMailSender {
private JavaMailSender mailSender;
public boolean sendEmail() {
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setFrom("[email protected]");
mimeMessageHelper.setTo("[email protected]");
mimeMessageHelper.setText("Unit Test for java mail Demo");
mailSender.send(mimeMessageHelper.getMimeMessage());
return true;
} catch (MessagingException e) {
return false;
}
}
}
GreenMailはまた、メッセージがユーザーに送信されたことを検証することをサポートしています.上記の実装では、ユーザーに送信する必要があります[email protected]は、次のコードで検証できます.
@Test
public void shouldSendToSpecifiedUser() throws Exception {
mailSender.sendEmail("Unit Test for java mail Demo");
GreenMailUser greenMailUser = mailServer.setUser("[email protected]", null);
MailFolder inbox = mailServer.getManagers().getImapHostManager().getInbox(greenMailUser);
List<StoredMessage> messages = inbox.getMessages();
assertThat(messages.size(),equalTo(1));
String content = (String) messages.get(0).getMimeMessage().getContent();
assertThat(content.trim(), equalTo("Unit Test for java mail Demo"));
}
より多くの使い方、公式サイトに参加します:
http://www.icegreen.com/greenmail/