我剛剛在VS中使用測試項目,並且正在使用VS 2012.比方說,我有一個WCF服務,它執行對數據庫的讀取並返回帶有狀態碼(數字)和狀態信息(「成功」或「威爾羅賓遜危險」)的對象。我如何測試Visual Studio測試項目中的「錯誤」
作爲單元測試的一部分,我不希望能夠測試這些錯誤代碼和消息是否適當返回?如果是這樣,我將如何去測試這些異常情況?
我剛剛在VS中使用測試項目,並且正在使用VS 2012.比方說,我有一個WCF服務,它執行對數據庫的讀取並返回帶有狀態碼(數字)和狀態信息(「成功」或「威爾羅賓遜危險」)的對象。我如何測試Visual Studio測試項目中的「錯誤」
作爲單元測試的一部分,我不希望能夠測試這些錯誤代碼和消息是否適當返回?如果是這樣,我將如何去測試這些異常情況?
有兩種類型的錯誤需要測試。作爲結果的一部分返回的那些以及作爲例外發生的那些。你可以測試第一類型,如:
[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
}
在你知道的,將引發異常,並且將無法處理這種情況。在這裏,我們正在測試一些執行一些數學操作的虛擬服務,如分割。
這應該給你一個想法如何接近你的單元測試。
感謝大家的幫助。最後,我能夠遵循這個模型並提供幾個測試來驗證成功和失敗的方法。 – ewitkows
偉大的答案大家,謝謝!所以我唯一的問題是...如果我有的服務不接受任何參數。我的服務和「GetUserNames()」一樣簡單,它只是返回一個數據列表。我在說,這是可以創建的最簡單的服務。我試圖想到一種方法,我可以保持服務的簡單性,而不必爲單元測試「添加」功能。知道我的意思嗎? – ewitkows
如果您需要爲單元測試添加「正好」功能,則此功能可能一直屬於此類功能。這種附加功能是否在出現問題時拋出異常?如果是這樣,如果你正在測試的東西誤入歧途,你是不是想在你的生產環境中做到這一點? –