如何测试ASP.NET MVC中的动作过滤器?

Arn*_*psa 15 testing asp.net-mvc action-filter

需要一些指示.找到这个这个,但我仍然有点困惑.

我只是想模拟ActionExecutedContext,传递它,让过滤器稍微工作并检查结果.

有帮助吗?

你可以在这里找到过滤器的来源
(它有点改变,但目前不是重点).

所以 - 我想要单元测试,RememberUrl过滤器足够智能,可以在会话中保存当前的URL.

eu-*_*-ne 12

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);
Run Code Online (Sandbox Code Playgroud)

2)假设您在RememberUrlAttribute的公共构造函数中注入会话包装器.

var rememberUrl = new RememberUrlAttribute(yourSessionWrapper);

rememberUrl.OnActionExecuted(actionExecutedContext.Object);

// Then check what is in your SessionWrapper
Run Code Online (Sandbox Code Playgroud)