c# – 如何使用moq模拟控制器上下文

我正在尝试MOQ框架,现在我已经遇到了障碍.以下单元测试失败,因为ViewName属性的实际值是空字符串.

任何人都可以指出我正确的方向,为什么这不通过测试?

[TestMethod]
public void Can_Navigate_To_About_Page()
{
    var request = new Mock<HttpRequestBase>();
    request.Setup(r => r.HttpMethod).Returns("GET");
    var mockHttpContext = new Mock<HttpContextBase>();
    mockHttpContext.Setup(c => c.Request).Returns(request.Object);

    var controllerContext = new ControllerContext(mockHttpContext.Object,new RouteData(),new Mock<ControllerBase>().Object);
    var controller = new HomeController();

    controller.ControllerContext = controllerContext;
    var result = controller.About() as ViewResult;

    Assert.AreEqual("About",result.ViewName);
}

以下还会产生一个空的ViewName.

HomeController controller = new HomeController();
        ViewResult result = controller.About() as ViewResult;
        Assert.IsNotNull(result);
        Assert.AreEqual("About",result.ViewName);

从网上展示模拟和良好TTD的例子我只是对于我需要做出上述第一个单元测试示例工作的其他管道工作感到困惑.

干杯,

安德鲁

解决方法

测试失败的原因是因为当您没有明确指定ViewName时,决定ViewName的是在框架的深度.更确切地说,在视图引擎中我相信.因此,为了测试它,你将不得不模拟更多的请求管道.

我所做的,并且建议,不依赖于认值并明确指定视图:

return View("About");

然后值将在那里进行测试而不会嘲笑任何东西:

var controller = new HomeController();
var result = controller.About() as ViewResult;
Assert.AreEqual("About",result.ViewName);

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么