Ray*_*Ray 3 asp.net-mvc nunit unit-testing rhino-mocks
出于安全原因,我使用MVC应用程序中的两个经典策略添加和删除了多个标头:
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Remove("Server");
HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
}
Run Code Online (Sandbox Code Playgroud)
并通过Web.Config:
<customHeaders>
<remove name="X-Powered-By" />
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
Run Code Online (Sandbox Code Playgroud)
现在我正在使用NUnit配合RhinoMocks进行测试,FWIW.
考虑到与嘲讽的困难HttpContext,这将是确保自定义标题是存在或不存在任何的我回到了意见HTTP响应的好方法?
验证此行为的正确方法是通过组件测试.原因很简单; 您正在尝试确保安全问题,在UT中,没有什么可以确保您的组件将使用此行为.我可以为你提供几个选项(代码编织工具,添加公共方法等等)来测试它作为UT,但IMO这是集成测试的经典案例.
要对组件测试此行为,请执行以下步骤:
提升自托管服务器(自主ASP.NET或OWIN到自主ASP.NET)
然后在调用方法并断言答案不包含标题:
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Assert.IsFalse(myHttpWebResponse.Headers.ContainsKey("X-Frame-Options");
Assert.IsFalse(myHttpWebResponse.Headers.ContainsKey("Server");
Assert.IsFalse(myHttpWebResponse.Headers.ContainsKey("X-AspNetMvc-Version");
//todo: add logic which read the following parameters from the configuration
Assert.IsFalse(myHttpWebResponse.Headers.ContainsKey("X-AspNet-Version");
Assert.AreEquals("DENY", myHttpWebResponse.Headers["X-Frame-Options"]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |