У меня есть MailService, который позволяет мне отправлять электронную почту, которая реализует следующий интерфейс.
public interface IMailService
{
bool SendRegisteringEmail(RegisterModel registerModel);
bool SendMail(MailMessage mailMessage);
MailMessage CreateRegisteringMailMessage(RegisterModel registerModel);
IAppSettingsRepository AppSettingsRepository { get; set; }
ISmtpClient SmtpClient { get; set; }
}
Функция SendRegisteringEmail должна вызвать CreateRegisteringMailMessage, затем передать ответное сообщение MailMessage функции SendMail, а SendRegisteringEmail должен вернуть возвращаемое логическое значение SendMail.
Я использую NUnit и Rhino Mocks для выполнения своего теста, я новичок в тестировании (1 неделя) и практикую TDD (по крайней мере, я пытаюсь). Моя проблема в том, что я не знаю, как утверждать, что CreateRegisteringMailMessage был вызван, когда я вызываю SendRegisteringEmail, потому что MailService не является имитацией объекта. Вот мой тест:
[Test]
public void SendRegisteringEmail_ShouldCallCreateRegisteringMailMessage()
{
//Arrange
//MailMessage mailMessage = new MailMessage();
IMailService mailService = new MailService { AppSettingsRepository = CreateAppSettingsMockReposotory() };
//ISmtpClient smtpClientStub = MockRepository.GenerateStub<ISmtpClient>();
//mailService.SmtpClient = smtpClientStub;
//smtpClientStub.Stub(f => f.Send(mailMessage)).Return(true);
//Act
mailService.SendRegisteringEmail(ValidRegisterModel);
//Assert
mailService.AssertWasCalled(f => f.CreateRegisteringMailMessage(ValidRegisterModel));
}
При запуске теста появляется следующая ошибка: FtpWeb.Tests.MailServiceTests.SendRegisteringEmail_ShouldCallCreateRegisteringMailMessage: System.InvalidOperationException: объект FtpWeb.Models.MailService не является имитацией.
Я понимаю, почему я получаю эту ошибку, но теперь как проверить свой звонок. Поскольку это один и тот же объект, я не могу издеваться над ним, чтобы проверить. Если кто-нибудь может дать мне какое-то руководство, чтобы решить эту проблему.
Спасибо.