2016-04-07 23 views
3

ASP.NET MVC Uygulaması, iade edilen Test için:HTTP üst bir MVC Uygulamasında iki klasik stratejilerini kullanma ekledim ve güvenlik nedenleriyle başlıklarının bir dizi kaldırdık

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"); 
} 

Ve Web aracılığıyla .Config:

<customHeaders> 
    <remove name="X-Powered-By" /> 
    <add name="X-Frame-Options" value="DENY" /> 
</customHeaders> 

Şu anda RhinoMocks test için FWIW ile eşleştirilmiş NUnit kullanıyorum.

HttpContext, alaylarıyla ilgili zorluklar göz önüne alındığında, özel başlıkların, döndüğüm görünümlerin tümü için http yanıtında bulunup bulunmadığından emin olmanın iyi bir yolu ne olurdu?

+0

Şimdiye kadar denediğiniz sınamalardan birini gösterebilir, bu nedenle sorunlarınız çoğaltılabilir ve belki de biri olası bir çözüm sağlayabilir. – Nkosi

cevap

4

Bu davranışı doğrulamanın doğru yolu bir Bileşen sınamasıdır. Nedeni oldukça basit; Bir güvenlik sorununu sağlamaya çalışıyorsunuz, UT'de hiçbir şey, bileşeninizin bu davranışı kullanacağından emin olamaz. Size UT olarak test etmek için size birkaç seçenek sunabilirim (kod dokuma araçları, genel yöntem ve vb.), Ancak IMO bu Entegrasyon testi için klasik bir durumdur. Bileşen testi için

bu davranış aşağıdaki adımları izleyin:

kendini ev sahibi sunucusu (Self-Host ASP.NET veya OWIN to Self-Host ASP.NET) Sonra

çağrısında bir yöntem kaldırın ve cevap başlıklarının bulunduğu etmediğini iddia:

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"]); 
+0

Bu soruya bir ek olarak ve Fox'un cevabı. Microsoft mühürlü sınıflar için kendi soyutlamalarınızı oluşturmanın ve daha sonra sahte olmanın ve sınamanın ya da Microsoft'tan biri de dahil olmak üzere çeşitli soyutlama projelerinden birini indirmeniz mümkündür. Ayrıca, HttpContext ile bu sorunlara neden sahip olduğumuz hakkında daha fazla bilgi için bu soruya da bakın: http://stackoverflow.com/questions/1947471/unable-to-examine-reponse-headers-in-unit-test – Ray

İlgili konular