2013-06-03 63 views
0

我已經通過實現NUnit.Framework.IExpectException接口創建了一個預期的異常屬性,如文檔(http://www.nunit.org/index.php?p=exception&r=2.6.2)所示,它工作得很好。它驗證拋出的異常屬於正確的類型,並驗證異常中某些屬性的值。單元測試IExpectException的實現

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
public class ExpectedHttpErrorExceptionAttribute : ExpectedExceptionAttribute, IExpectException 
{ 
    public HttpStatusCode StatusCode { get; set; } 

    public ExpectedHttpErrorExceptionAttribute() 
     :base(typeof(HttpError)) 
    {} 

    public ExpectedHttpErrorExceptionAttribute(HttpStatusCode statusCode) 
     :this() 
    { 
     StatusCode = statusCode; 
    } 

    public void HandleException(Exception ex) 
    { 
     Assert.That(ex, Is.TypeOf(ExpectedException), "Expected exception of type '{0}' but an exception of type '{1}' has been throwned.", typeof(HttpError).FullName, ex.GetType().FullName); 

     var httpStatusCode = ((HttpError) ex).StatusCode; 
     Assert.That(httpStatusCode, Is.EqualTo(StatusCode), "Expected status code '{0}' but was '{1}'.", StatusCode, httpStatusCode); 

    } 
} 

我的問題是,我想單元測試的屬性,但我不明白的方式來測試以下情況:

A unit test that have the attribute should fail if no exception are thrown.

我只是想不出辦法爲這種情況編寫一個單元測試,因爲在拋出異常時不會調用HandleException。

有什麼建議嗎?

回答

3

你在這裏寫測試失敗的原因是你正試圖測試你的班級沒有責任的功能。

你的等級只適用於情況下驗證異常,如果異常被拋出。如果沒有拋出的異常沒有什麼驗證:)

這是測試跑步者的責任(NUnit的或一些其他)失敗時測試方法都裝飾有ExpectedExceptionAttribute(或繼承屬性)的測試,並有在測試過程中不會拋出異常。

所以,你不需要寫一個測試FOT這樣的情景。

相關問題