单元测试 Asp.net MVC 控制器动作

3

我有一个控制器动作,用于检查

this.User.Identity.IsAuthenticated

你认为如何处理这样一个行动的单元测试?

完全相同的问题:https://dev59.com/1XNA5IYBdhLWcg3wEZaT - eu-ge-ne
谢谢Eugene...之前没找到过... - Robert Koritnik
1个回答

5
我建议模拟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?User属性是Controller类的一部分,并且有它自己的代码,我无法控制。 - Robert Koritnik
好的。现在您的代码已经得到了答案。我之前不知道ControllerContext属性,谢谢。 - Robert Koritnik
在 Moq 中,您使用 SetupGet 来模拟属性(Setup 仅用于模拟方法)。 - eu-ge-ne
是的。或者如果它同时具有setter和getter并且带有“memory”,则可以使用SetupProperty... ;) 我知道。womp的代码已经足够让我正确理解概念了。 - Robert Koritnik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接