asp.net-mvc - 如何在 ASP.NET MVC 中测试操作过滤器?

标签 asp.net-mvc testing action-filter

为此需要一些指示。找到thisthis ,但我仍然有点困惑。

我只想模拟 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/

相关文章:

c# - Controller 上的 ActionFilterAttribute 与操作方法

asp.net-mvc - 在 ASP.NET MVC 中,有哪些方法可以停止表单的多次回发?

javascript - MVC 4 ASP.Net FORM 提交()函数不起作用

c# - 哪种方式更好?将媒体文件作为字节数组还是字符串保存到 MongoDB?

c# - 将 Javascript 变量传递给 MVC3 中的路由值

javascript - 未捕获的语法错误 : Unexpected token &

java - 当 pitest 找不到测试类时

asp.net-core - 将参数从操作过滤器传递给 Controller

python - Django 应用程序测试不会专门运行(但会运行所有测试)

angularjs - 使用 Jest 在 Angular 1.x 上进行快照测试