如何对这个.net MVC功能进行单元测试?

时间:2015-05-06 04:18:36

标签: asp.net-mvc unit-testing

我有这个功能和单元测试。

ProfileController代码

[TestMethod]
public void TestDetailsViewData()
{
    var controller = new ProfileController(_Profile); 

    var result = controller.Edit(1) as ViewResult;
    var profile = (VIEWMODELS.Customer.Profile)result.ViewData.Model;
    Assert.AreEqual("Testor", profile.cardName);
}

单元测试代码

var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Profile", new { id = 0 });

我想测试这个函数,这个函数将重定向到索引页面并返回带有数据的ViewPage。但问题是当我运行这个单元测试代码时,我在这一行得到了Null异常,因为Request是NULL

[TestMethod]
        public void TestDetailsViewData()
        {
            var request = new Mock<HttpRequestBase>(); 
            request.SetupGet(x => x.Headers).Returns(
                new System.Net.WebHeaderCollection {
                {"X-Requested-With", "XMLHttpRequest"}
            });

            var context = new Mock<HttpContextBase>();
            context.SetupGet(x => x.Request).Returns(request.Object);
            //context.SetupGet(x => x.Request.RequestContext ).Returns(request.Object.RequestContext);

            var controller = new ProfileController(_Profile);
            controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
            controller.Request.RequestContext = context.Object.Request.RequestContext;
            var result = controller.Edit(1) as ViewResult;
            var profile = (VIEWMODELS.Customer.Profile)result.ViewData.Model;
            Assert.AreEqual("testor", profile.cardName);
        }

所以我可以知道如何测试这个?

更新了Moq功能 在进一步阅读并从here获得一些示例代码后,似乎请求能够填充值,但现在RequestContext为NULL,任何人都可以指向我正确的位置供我学习?

</p>

1 个答案:

答案 0 :(得分:0)

发生错误是因为请求未在Test方法中定义。我认为你必须使用visual studio fakes。

https://msdn.microsoft.com/en-us/library/hh549175.aspx