public void Log_Always_DisposesCreatedSmtpClient()
        {
            // Arrange
            var smtpClient = new DisposableSmtpClient();

            Assert.IsFalse(smtpClient.IsDisposed, "Test setup failed.");

            DisposeTesterMailLoggingProvider provider = CreateInitializedDisposeTesterMailLoggingProvider();

            provider.SmtpClientToReturnFromCreateSmtpClient = smtpClient;

            // By letting the BuildMailMessage return null, we force the SmtpClient.Send method to throw an
            // exception. This prevents a mail message from actually being send and also checks whether an
            // exception will still result in the SmtpClient being disposed.
            provider.MailMessageToReturnFromBuildMailMessage = null;

            try
            {
                // Act
                provider.Log("Some message");

                // Assert
                Assert.Fail("ArgumentNullException expected.");
            }
            catch (ArgumentNullException)
            {
                Assert.IsTrue(smtpClient.IsDisposed, "The StmpClient should have been disposed.");
            }
        }
        private static DisposeTesterMailLoggingProvider CreateInitializedDisposeTesterMailLoggingProvider()
        {
            var provider = new DisposeTesterMailLoggingProvider();

            // Set the SmtpClient before calling Initialize.
            provider.SmtpClientToReturnFromCreateSmtpClient = new SmtpClient();

            provider.Initialize("valid name", CreateValidConfiguration());

            return(provider);
        }
        public void Log_AfterInitializingProvider_DisposedCreatedSmtpClient()
        {
            // Arrange
            var provider = new DisposeTesterMailLoggingProvider();

            var smtpClient = new DisposableSmtpClient();

            Assert.IsFalse(smtpClient.IsDisposed, "Test setup failed.");

            // Set the SmtpClient before calling Initialize.
            provider.SmtpClientToReturnFromCreateSmtpClient = smtpClient;

            // Act
            provider.Initialize("valid name", CreateValidConfiguration());

            Assert.IsTrue(smtpClient.IsDisposed);
        }