【问题标题】:Unit testing an Asp.net MVC controller action单元测试 Asp.net MVC 控制器动作
【发布时间】:2009-07-14 22:15:25
【问题描述】:

我有一个控制器动作来检查

this.User.Identity.IsAuthenticated

您对如何处理此类操作的单元测试有何建议?

【问题讨论】:

标签: asp.net-mvc unit-testing controller


【解决方案1】:

我建议模拟 IsAuthenticated 属性。 SO上有很多关于这个的其他帖子,你可以搜索一下。

这是一个使用 Moq 模拟请求的示例:

var mockRequest = new Mock<HttpRequestBase>();
mockRequest.Setup(x => x.IsAuthenticated).Returns(true); 

var mockContext = new Mock<ControllerContext>();
mockContext.Setup(x => x.Request).Returns(mockRequest.Object);

var myController = new MyController();
myController.ControllerContext = new ControllerContext(mockContext.Object, new RouteData(), myController);

我强烈建议您研究 Scott Hanselman 无处不在的“MvcMockHelpers”代码,我正在使用它:

http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

【讨论】:

  • 但是你将如何注入你模拟的 HttpContext/Request 呢?用户属性是 Controller 类的一部分,它有自己的代码,我无法影响。
  • 好的。现在你的代码有了答案。我不知道的 ControllerContext 属性。谢谢。
  • 在 Moq 中,您使用 SetupGet 来模拟属性(Setup 仅用于模拟方法)
  • 是的。甚至 SetupProperty,如果它同时具有“内存”的设置器和获取器...;)我知道。 womp 的代码足以让我理解这个概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
相关资源
最近更新 更多