【发布时间】:2011-03-12 00:22:56
【问题描述】:
我想为 ASP.NET MVC 3 应用程序编写一个TaskController 以完成一些长时间运行的任务,例如向网站用户发送新闻通讯。我认为使用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
}
}
如何为 AsyncController 编写规范?想象一下,我从以下规范开始:
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 的结果?
【问题讨论】:
标签: testing asp.net-mvc-3 bdd mspec asynccontroller