Asp.net-Mvc

如何在 ASP.NET MVC 中測試操作過濾器?

  • March 18, 2021

需要一些指示。找到了這個這個,但我還是有點困惑。

我只想模擬 ActionExecutedContext,傳遞它,讓過濾器工作一點並檢查結果。

有什麼幫助嗎?

您可以在此處
找到過濾器的來源 (它發生了一些變化,但目前還不是重點)。

所以 - 我想要單元測試,RememberUrl 過濾器足夠聰明,可以在會話中保存目前 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);
  1. 假設您在 RememberUrlAttribute 的公共建構子中註入會話包裝器。
var rememberUrl = new RememberUrlAttribute(yourSessionWrapper);

rememberUrl.OnActionExecuted(actionExecutedContext.Object);

// Then check what is in your SessionWrapper

引用自:https://stackoverflow.com/questions/1057776