How to test email sending?
Friday, September 25th, 2009Nearly every web application these days sends some notifications to its users.
Many times before, I came across people who said that it’s not possible to test such things.
Well, they are wrong!
There is a very cool project on sourceforge called nDumbster:
http://ndumbster.sourceforge.net
nDumbster is a simple fake SMTP server designed especially to enable unit testing.
[TestFixture]
public class SmtpClientTest
{
private const int _port = 25;
private SimpleSmtpServer _smtpServer;
[SetUp]
public void SetUp()
{
_smtpServer = SimpleSmtpServer.Start(_port);
}
[TearDown]
public void TearDown()
{
_smtpServer.Stop();
}
[Test]
public void SendMessage_SendsMessage()
{
Mail.Text("Some tex")
.Subject("Some subject")
.From(new MailBox("alice@mail.com", "Alice"))
.To(new MailBox("bob@mail.com", "Bob"))
.UsingNewSmtp()
.Server("localhost")
.OnPort(_port)
.Send();
Assert.AreEqual(1, _smtpServer.ReceivedEmailCount);
SmtpMessage mail = _smtpServer.ReceivedEmail[0];
Assert.AreEqual(""Alice" <alice@mail.com>", mail.Headers["From"]);
Assert.AreEqual(""Bob" <bob@mail.com>", mail.Headers["To"]);
Assert.AreEqual("Some subject", mail.Headers["Subject"]);
Assert.AreEqual("Some text", mail.Body);
}
};



