2010-07-13 24 views
13

C# 4.0 kullanıyorum ve bir servisi sınamaya ihtiyacım var. Hizmet içindeki işlev beklediğim değişkene benzer bir yol döndürür, geri dönmeyi beklediğim yol budur. Ama bu testi çalıştırdığımda HttpContext.Current NULL olduğunu hatayı alıyorum. Bu sorunu düzeltmek için ne yapabilirim, böylece test çalıştırılabilir?Birim testinde httpcontext kullanma

[TestMethod] 
public void GetPathTest() 
{ 
    var expected = System.IO.Path.GetFullPath(HttpContext.Current.Server.MapPath("~/Certificates/")); 
    var path = _mockService.Setup(o => o.GetPath()).Returns(expected); 
} 

cevap

17

gibi, ASP.Net birim test için oluşturulan nitelikler bakarak deneyebilirsiniz Daha önce kullandığım HttpContext için tüm sarıcımı bulamıyorum, ancak şu anda sadece boş bir istek için bir içerik oluşturuyoruz ve şu andan itibaren böyle bir durum yaratıyoruz:

SimpleWorkerRequest request = new SimpleWorkerRequest("","","", null, new StringWriter()); 
HttpContext context = new HttpContext(request); 

Ardından birim testinde başlatmak veya aşağıdaki gibi birim testi kendisi (Beklenen oluşturmadan önce) içinde geçerli HttpContext ayarlayabilirsiniz:

HttpContext.Current = context; 

Sonra sadece sahte bağlam ve olası sahte SessionState vb eti dışarı gereğince, gerektiği gibi.

(Düzelt: Bu, tümüyle VS2008, çerçeve 3.5).

+0

Yanıt için teşekkürler! Bu yaptı, ancak doğru yolu ve adresleri ekleyerek simpleworkerrequest biraz değiştirdim. – Rob

2

Sen elimden Şu anda

[HostType("ASP.NET")] 

Bu link to MSDN sahiptir bu konuda oldukça iyi yazma-up

1

Başvuru için bunu gönderiyorum. Bu kolay bir çözüm değil ve Ördek Yazma bahsediyor (o quacks eğer ..):

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx

O alakalı ve salt değer; Çünkü bir IHttpContext yoktur, bir test ortamı uygulaması oluşturmak mümkün değildir - Ördek Yazma kütüphanesini burada kullanmayı düşününceye kadar. Bu doğrudan bir cevap olmasa da.

Bu yardımcı olur umarım. Sen aşağıdakilerden ile test yöntemini süslemeleri

2

nitelikleri:

[TestMethod] 
[HostType("ASP.NET")] 
[UrlToTest("http://localhost:xxxx/")] 
[AspNetDevelopmentServerHost("$(SolutionDir)\\xxx\\", "/")] 
public void TestMethod() 
{ 
    ... 
} 

Sonra birim test proj içine Default.aspx dosyası ekleyerek.

Test yönteminin içinde HttpContext'e kolayca erişebilirsiniz. Eğer hata ayıklamak istiyorsanız MSDN tarafından açıklandığı gibi , sen işleme hata ayıklayıcı ekleme sonra bazı izleri kullanabilir veya talimat System.Diagnostics.Debugger.Break()

public void TestMethod() 
{ 
    System.Diagnostics.Debugger.Break(); 

    ... 
} 

ile ayıklama çalıştırılmasını durdurmak ve içerebilir: https://msdn.microsoft.com/en-us/library/vstudio/c6wf8e4z(v=vs.100).aspx

İlgili konular