为此需要一些指示。找到this和 this ,但我仍然有点困惑。
我只想模拟 ActionExecutedContext,传递它,让过滤器稍微工作一下并检查结果。
有什么帮助吗?
您可以找到过滤器的来源here
(它发生了一些变化,但目前不是重点)。
所以 - 我想要单元测试,RememberUrl 过滤器足够智能,可以在 session 中保存当前 URL。
最佳答案
1) 在 ActionExecutedContext 中模拟 Request.Url:
var request = new Mock<HttpRequestBase>();
request.SetupGet(r => r.HttpMethod).Returns("GET");
request.SetupGet(r => r.Url).Returns(new Uri("http://somesite/action"));
var httpContext = new Mock<HttpContextBase>();
httpContext.SetupGet(c => c.Request).Returns(request.Object);
var actionExecutedContext = new Mock<ActionExecutedContext>();
actionExecutedContext.SetupGet(c => c.HttpContext).Returns(httpContext.Object);
2) 假设您在 RememberUrlAttribute 的公共(public)构造函数中注入(inject) session 包装器。
var rememberUrl = new RememberUrlAttribute(yourSessionWrapper);
rememberUrl.OnActionExecuted(actionExecutedContext.Object);
// Then check what is in your SessionWrapper
关于asp.net-mvc - 如何在 ASP.NET MVC 中测试操作过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057776/