2011-06-25 16 views
5

WCF web hizmeti için bir birim testi yazıyorum. Kasıtlı olarak WebExceptionFault<string>'u atan sunucuya geçersiz bir istek gönderiyorum. Ünite testinde yakalanan İstisna, InnerException özelliğinde standart WebException standardıdır. Yanıtın gövdesinin orada olması gerektiğini düşündüğüm dizeyle eşleştiğini doğrulamak istiyorum.İç Özel Durum Özellikleri Disseke Edildi mi?

WebException (System.Net.SyncMemoryStream olan) Response özelliği yok sayılır ve okunamıyor.

Kodum:

Clubs actual; 
try 
{ 
    //"201" is an invalid argument for the first parameter 
    actual = new Clubs(channel.GetClubs("201", "123")); 
} 
catch (EndpointNotFoundException e) 
{ 
    WebException w = e.InnerException as WebException; 
    Assert.IsNotNull(w); 

    HttpWebResponse resp = w.Response as HttpWebResponse; 
    Assert.IsNotNull(resp); 
    Assert.AreEqual(resp.StatusCode, HttpStatusCode.NotFound); 
    //Next line throws an ArgumentException saying Stream not readable 
    //Investigation shows it has been disposed 
    using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
     Assert.AreEqual(sr.ReadToEnd(), "League not allowed for selected club"); 
} 

o InnerException özellikleri bertaraf edilmektedir normal mi? Bunun etrafında bir yolu var mı?

+8

inşa olabilir. System.Net, istisnayı yakalayan kişinin, yanıt akışını kazma ve elden çıkarma zorluğundan geçeceğini varsaymayacaktır. Yani atmadan önce temizler. Bu davranışı değiştiremezsin. –

+0

Şüphesiz, temel bağlantı doğru kapatılmışsa yanıt akışına erişememeniz gerekir. Bu noktada, 'EndPointNotFoundException' istisnasını işleme koymaya başladığınızda neredeyse tamamen kapattınız. Anketi cevap akışında hemen okuduktan ve bunu sararken istisna işlemeye başlamalısınız. –

+0

@Jeff: Yukarıdaki örnekte altta yatan bağlantı ne zaman kapalı? Yanıt akışını okumak için görebildiğim en erken nokta, "HttpWebResponse" yi aldıktan sonra. Bu demek istediğin yer mi? – Clivest

cevap