A SMTP server mock is basically a fake SMTP server which can be used for unit testing of applications which send email messages. It acts as a real smtp server, except that the incoming messages are locally stored and not actually delivered. This can be quite usefull if you are using real data for testing.;-)
1: [Test]
2: public void MailTest
3: {
4: SmtpMock smtpServerMock = new SmtpMock ;
5: smtpServerMock.Start;
6: System.Web.Mail.SmtpMail.SmtpServer = "localhost";
7: System.Web.Mail.SmtpMail.Send("somebody@foo.com", "everybody@bar.com", "This is the subject", "This is the body.");
8: smtpServerMock.Stop ;
9:
10: Assert.AreEqual (1, smtpServerMock.Sessions.Count);
11: SmtpSession session = (SmtpSession) smtpServerMock.Sessions[0];
12: Assert.IsTrue (session.SessionProtocol.IndexOf("somebody@foo.com") > 0 );
13: Assert.IsTrue (session.SessionProtocol.IndexOf("everybody@bar.com") > 0 );
14: Assert.IsTrue (session.SessionProtocol.IndexOf("This is the subject") > 0 );
15: Assert.IsTrue (session.SessionProtocol.IndexOf("This is the body.") > 0 );
16:
17: }
Example: Unit-Test with SMTP-Server Mock
As I couldn't find a.NET implementation (take a look at dumbster for java version), I decided to write one myself. The implementation is very simple as it only opens a listener at port 25 and responds to pretty much anything with 250 OK. ;-) . The recieved emails are stored in SessionProtocol (see example).
