加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:16:46 所属栏目:百科 来源:网络整理
导读:我正在尝试MOQ框架,现在我已经遇到了障碍.以下单元测试失败,因为ViewName属性的实际值是空字符串. 任何人都可以指出我正确的方向,为什么这不通过测试? [TestMethod]public void Can_Navigate_To_About_Page(){ var request = new MockHttpRequestBase(); re
我正在尝试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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读