Introducing NFakeMail

Posted by João Angelo on Exceptional Code See other posts from Exceptional Code or by João Angelo
Published on Wed, 08 Sep 2010 23:00:28 +0000 Indexed on 2010/12/06 16:59 UTC
Read the original article Hit count: 402

Filed under:
|
|
|
|

Ever had to resort to custom code to control emails sent by an application during integration and/or system testing? If you answered yes then you should definitely continue reading.

NFakeMail makes it easier for developers to do integration/system testing on software that sends emails by providing a fake SMTP server. You’ll no longer have to manually validate the email sending process. It’s developed in C# and IronPython and targets the .NET 4.0 framework.

With NFakeMail you can easily automate the testing of components that rely on sending mails while doing its job. Let’s take a look at some sample code, we start with a simple class containing a method that sends emails.

class Notifier
{
    public void Notify()
    {
        using (var smtpClient = new SmtpClient("localhost", 10025))
        {
            smtpClient.Send("[email protected]", "[email protected]", "S1", ".");

            smtpClient.Send("[email protected]", "[email protected]", "S2", "..");
        }
    }
}

Then to automate the tests for this method we only need to the following:

[Test]
public void Notify_T001()
{
    using (var server = new FakeSmtpServer(10025))
    {
        new Notifier().Notify();

        // Verifies two messages are received in the next five seconds
        var messages = server.WaitForMessages(count: 2, timeout: 5000);

        // Verifies the message sender
        Debug.Assert(messages.All(m => m.From.Address == "[email protected]"));
    }
}

The created FakeSmtpServer instance will act as a simple SMTP server and intercept the messages sent by the Notifier class. It’s even possible to verify some fields of each intercepted message and by default all intercepted messages are saved to the file system in MIME format.


© Exceptional Code or respective owner

Related posts about .NET

Related posts about c#