我对asp.net mvc使用restful routing module,对此非常满意。但是我什么也做不了。例如,我有一个类似的控制器动作:

public ActionResult Index()
{
    if (Request.IsAjaxRequest())
        return PartialView();
    return View();
}


并且编写这样的规范没有问题:

[Subject(typeof(LotsController))]
public class When_Index_called
{
    static LotsController controller;

    static ActionResult actionResult;

    Establish context = () => {
        controller = mocker.Create<LotsController>();
        controller.ControllerContext = Contexts.Controller.Default;
    };

    Because of = () => actionResult = controller.Index();

    It should_render_view = () => actionResult.AssertViewRendered().ForViewWithDefaultName();


但是,通过使用其余部分,我想要一个这样的Index方法:

public ActionResult Index()
{
    return RespondTo(format => {
        format.Html = () => {
            if (Request.IsAjaxRequest())
                return PartialView();
            return View();
        };
        format.Json = () => Json(new { });
    });
}


确保先前的规范失败,因为操作结果不是ViewResult类型,而是FormatResult类型。 FormatResult本身会覆盖ExecuteResult方法,该方法返回void。如果要验证FormatResult中的操作结果类型和数据,如何对这种情况进行单元测试?

最佳答案

在将来的静态路由版本中,这样的代码是可能的:

var formatResult = actionResult as FormatResult;
ActionResult result = formatResult.ExposeResult().Html();
result.ShouldBeOfType<ViewResult>();

07-24 09:17