ViewResult.ViewName在UnitTest上返回空

时间:2015-02-06 15:03:56

标签: c# asp.net .net unit-testing tdd

我看到有很多关于同一主题的问题,但由于它们都来自2008年至2011年,我说有可能这可能是一种正式的方式来做到这一点没有外部库/扩展。

所以问题是在运行我的测试用例时,ViewName为空:

// Act
ViewResult result = await Controller.Create(model) as ViewResult;

// Assert
Assert.AreEqual("Create", result.ViewName);

任何官方方式来解决这个问题?或者我可以测试一些其他财产?

1 个答案:

答案 0 :(得分:0)

如果你的控制器方法只是

return View();

如果没有给出视图名称参数值,则不会在ViewName属性中拥有视图的名称。对于单元测试控制器,请阅读:https://msdn.microsoft.com/en-us/library/ff847525(v=vs.100).aspx

如何使用ControllerContext

创建控制器
HomeController controller = new HomeController(repository);

controller.ControllerContext = new ControllerContext()
{
    Controller = controller,
    RequestContext = new RequestContext(new MockHttpContext(), new RouteData())
};

使用:

private class MockHttpContext : HttpContextBase {
    private readonly IPrincipal _user = new GenericPrincipal(
             new GenericIdentity("someUser"), null /* roles */);

    public override IPrincipal User {
        get {
            return _user;
        }
        set {
            base.User = value;
        }
    }
}