2013-06-25 101 views
0

我剛剛在VS中使用測試項目,並且正在使用VS 2012.比方說,我有一個WCF服務,它執行對數據庫的讀取並返回帶有狀態碼(數字)和狀態信息(「成功」或「威爾羅賓遜危險」)的對象。我如何測試Visual Studio測試項目中的「錯誤」

作爲單元測試的一部分,我不希望能夠測試這些錯誤代碼和消息是否適當返回?如果是這樣,我將如何去測試這些異常情況?

+0

偉大的答案大家,謝謝!所以我唯一的問題是...如果我有的服務不接受任何參數。我的服務和「GetUserNames()」一樣簡單,它只是返回一個數據列表。我在說,這是可以創建的最簡單的服務。我試圖想到一種方法,我可以保持服務的簡單性,而不必爲單元測試「添加」功能。知道我的意思嗎? – ewitkows

+0

如果您需要爲單元測試添加「正好」功能,則此功能可能一直屬於此類功能。這種附加功能是否在出現問題時拋出異常?如果是這樣,如果你正在測試的東西誤入歧途,你是不是想在你的生產環境中做到這一點? –

回答

0

有兩種類型的錯誤需要測試。作爲結果的一部分返回的那些以及作爲例外發生的那些。你可以測試第一類型,如:

[UnitTest] 
public void MethodUnderTest_ScenarioBeingTested_ResultOfTest() 
{ 
    // Arrange 
    string expectedError = "Danger Will Robinson"; 
    IMySpecialService service = new FakeSpecialService(); 

    // Act 
    var result = service.CallOperation(thisArgumentCausesError); 

    // Assert 
    Assert.AreEqual(expectedError, result.ReturnMessage); 
} 

以上將測試從一些虛構的對象返回一個錯誤信息,並會針對預期的錯誤消息「危險威爾羅賓遜」進行比較;

當你想使用類似的方法,但有一個特殊的屬性裝飾你的單元測試類測試例外:

[ExpectedException(typeof(System.DivideByZeroException))] 
[UnitTest] 
public void MethodUnderTest_ScenarioBeingTested_ExpectedResult() 
{ 
    // Arrange 
    int i = 0; 
    int j = 0; 
    IMathService service = new FakeService(); 

    // Act 
    decimal result = service.PerformDivision(i, j); 

    // Assert 
    // This part is never reached because Assertion is handled by ExpectedException 
} 

在你知道的,將引發異常,並且將無法處理這種情況。在這裏,我們正在測試一些執行一些數學操作的虛擬服務,如分割。

這應該給你一個想法如何接近你的單元測試。

+0

感謝大家的幫助。最後,我能夠遵循這個模型並提供幾個測試來驗證成功和失敗的方法。 – ewitkows

相關問題