Я хочу написать TaskController
для приложения ASP.NET MVC 3 для некоторых долгосрочных задач, таких как рассылка новостей пользователям сайта.Я подумал, что было бы целесообразно использовать AsyncController
, поскольку отправка электронных писем может занять некоторое время, и я хочу иметь возможность сохранить некоторое состояние в базе данных, когда задача завершится.
Будучи должным образом воспитанным разработчиком,Я (: þ), и, будучи действительно в BDD, я естественно хочу начать со спецификации, используя MSpec.
Представьте, что мой контроллер выглядит так:
public class TaskController : AsyncController
{
readonly ISession _session;
public TaskController(ISession session)
{
_session = session;
}
public void SendMailAsync()
{
// Get emails from db and send them
}
public ActionResult SendMailCompleted()
{
// Do some stuff here
}
}
Как это сделать?идти о написании спецификаций для AsyncControllers?Представьте, что я начинаю со следующей спецификации:
public class TaskControllerContext
{
protected static Mock<ISession> session;
protected static TaskController controller;
protected static ActionResult result;
}
[Subject(typeof(TaskController), "sending email")]
public class When_there_is_mail_to_be_sent : TaskControllerContext
{
Establish context = () =>
{
session = new Mock<ISession>();
controller = new TaskController(session.Object);
};
// is this the method to call?
Because of = () => controller.SendMailAsync();
// I know, I know, needs renaming...
It should_send_mail;
}
Должен ли я вызывать метод SendMailAsync
для теста?Я действительно чувствую себя отвратительно.Как мне поступить с результатом SendMailCompleted
?