Я получаю сообщение об ошибке при попытке протестировать класс (FindTask
), который совершает вызов другого класса (NotificationMailer
), который наследуется от MVC MailerBase
.Ошибка при использовании Machine.Specs для тестирования класса с использованием MVC MailerBase
System.ArgumentNullException: Значение не может быть пустым. Имя параметра: HttpContext
class FindTask
{
public void Find()
{
notificationMailer.Notify("Some message").Send();
}
}
Я пытаюсь проверить, что FindTask
вызовы NotificationMailer::Notify
.
public class NotificationMailer : MailerBase, INotificationMailer
{
public NotificationMailer()
{
MasterName = "_Layout";
}
public virtual MvcMailMessage Notify(string message)
{
return Populate(x =>
{
x.Subject = "Some Notification";
x.ViewName = "Notify";
x.To.Add("[email protected]");
x.Body = message;
});
}
}
Ошибка на возвратного заселить (...) линии.
public class FindTaskSpec : WithSubject<FindTask>
{
Establish context =() =>
{
MvcMailMessage mailMessage = new MvcMailMessage();
The<INotificationMailer>()
.WhenToldTo(x => x.Notify(Param<string>.IsAnything))
.Return(mailMessage);
};
Because of =() => Subject.Find();
}
public class when_something_is_found : FindTaskSpec
{
It should_send_an_email_with_the_found_stuff =() => The<IDeadLinkMailer>()
.WasToldTo(x => x.Notify(Param<string>.IsAnything))
.OnlyOnce();
}
Я думаю, что линия Установить контекст (Мок) должен диктовать, что если Уведомлять называется, он должен вернуть новый MVCMailMessage без запуска через тело функции.
Мои вопросы:
Как я могу решить эту ошибку и тест, чтобы убедиться, что метод Notify называется?
Почему он издевается над Notify не останавливает тест от входа в тело функции уведомления?
На стороне записки я уже попытался установить MailerBase.IsTestModeEnabled = истина. Это приводит к ошибке Url - Недопустимый адрес: Url Empty;
Я прочитал their wiki page on setting up tests for MvcMailer.
Я также прочитал почти все другие страницы переполнения стека. Я думаю, что ссылка this была наиболее полезной. Проблема в том, что я не знаю, как имитировать то, что они делают в этой ссылке с Machine.Specifications.
Я думаю, что моя проблема будет решена, если я смогу создать макет для любого из методов, показанных в ссылках.
Это кажется насмешливой проблемой, а не проблемой MSpec ... –