У меня есть 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 не является Mocked Object.
Вот мой тест:
[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 не является поддельным объектом.
Я понимаю, почему я получаю эту ошибку, но теперь, как проверить мой звонок.
Поскольку это один и тот же объект, я не могу его высмеять, чтобы проверить.
Если кто-нибудь может дать мне какое-то руководство для решения этой проблемы.
Спасибо.