2014-02-21 57 views
1

我想編寫一個單元測試以確保我得到一個帶有從特定方法拋出的404狀態碼的WebException。使用NUnit測試WebFaultException的HTTP狀態

的引發WebException位是很容易:

[Test] 
[ExpectedException(typeof(WebFaultException))] 
public void CheckForWebFaultException() 
{ 
    var myClass = new MyClass(); 
    myClass.MyMethod(); 
} 

然而,這可能是一個404,400,401或任何其它的其他HTTP代碼的無數的。

我可以做一個嘗試/ catch/Assert.True,但這感覺像一個黑客攻擊。有沒有辦法對拋出異常的屬性進行置亂?

喜歡的東西

Assert.Throws(typeof(WebFaultException), myClass.MyMethod(), wfx => wfx.StatusCode == HttpStatusCode.NotFound); 

回答

2

我是在正確的線路,Assert.Throws實際上返回其拋出的異常。

[Test] 
public void CheckForWebFaultException() 
{ 
    var myClass = new MyClass(); 
    var ex = Assert.Throws<WebFaultException>(() => myClass.MyMethod()); 
    Assert.AreEqual(HttpStatusCode.NotFound, ex.StatusCode);  
} 

請注意,我已經採取了[ExpectedException(typeof(WebFaultException))]作爲例外處理,現在和測試將失敗,如果這是在離開了。

Assert.Throws確保異常被myClass.MyMethod()和第二斷言拋出檢查狀態碼。