フィルタコンテキストのHttpContextのHttpApplicationStateにオブジェクトを設定しているアクションフィルタがあります。単体テストでこの機能を使用したいのですが、何らかの理由で、HttpApplicationStateの派生元である基になるNameObjectCollectionBaseにオブジェクトが設定されていません。
MVCアプリケーションを実行すると期待どおりに機能するため、機能が機能することはわかっています。
オブジェクトをアプリケーション状態に設定するためにテストを設定するにはどうすればよいですか?私はMoqを使用していますが、これまでのコードの一部を次に示します。それは失敗します
Asset.IsNotNull(context.HttpContext.Application["config"]);
これがコードです。
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ControllerBase controller = filterContext.Controller;
if (!(controller is ApplicationController))
return;
ApplicationController applicationController = (ApplicationController) controller;
IDictionary<string, string> config;
// Loads the view configuration values.
if (filterContext.HttpContext.Application["config"] == null)
{
config = applicationController.ApplicationService.GetConfiguration();
filterContext.HttpContext.Application["config"] = config;
}
else
{
config = (IDictionary<string, string>) filterContext.HttpContext.Application["config"];
}
applicationController.ViewBag.BlogTitle = AddConfigurationValueToViewBag("BlogTitle", config);
}
これがこれまでのテストです。
[TestMethod]
public void ApplicationAttribute_OnActionExecuted_SetsConfigurationDctionaryInAppicationCache()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>();
var mockApplicationState = new Mock<HttpApplicationStateBase>();
httpContext.Setup(h => h.Application).Returns(mockApplicationState.Object);
ApplicationController applicationController = new BlogController(null, null, MocksAndStubs.CreateMockApplicationService());
Mock<ActionExecutedContext> actionExecutedContext = new Mock<ActionExecutedContext>();
actionExecutedContext.SetupGet(c => c.HttpContext).Returns(httpContext.Object);
actionExecutedContext.SetupGet(c => c.Controller).Returns(applicationController);
// Act
ApplicationAttribute applicationAttribute = new ApplicationAttribute();
ActionExecutedContext context = actionExecutedContext.Object;
applicationAttribute.OnActionExecuted(context);
// Assert
Assert.IsNotNull(context.HttpContext.Application["config"]);
}