2013-03-01 48 views
1

我在寫一組單元測試來測試CRUD系統。使用TestContext在單元測試之間共享信息

我需要Test1註冊用戶 - 它返回一個ServiceKey 然後我需要在Test2添加數據,我需要ServiceKey

什麼是傳遞ServiceKey的最佳方式的有哪些?我試圖在TestContext中設置它,但它似乎在測試之間消失。

回答

2

你不應該在單元測試之間共享一個狀態,單元測試是單元測試的一個非常重要的屬性 - Independency。測試不應該互相影響。

看到這個StackOverflow的帖子:What Makes a Good Unit Test?

編輯:回答評論

要共享的邏輯/行爲(方法),你可以提取公共代碼到一個輔助方法,並從不同的測試調用它,爲此創建一個用戶模擬實例輔助方法:

private IUser CreateUser(string userName) 
{ 
    var userMock = MockRepository.GenerateMock<IUser>(); 
    userMock.Expect(x => x.UserName).Return(userName); 
    return userMock; 
} 
+0

但我必須複製代碼來測試創建用戶。 - 我討厭複製+粘貼代碼 – GreyCloud 2013-03-01 15:37:04

+0

查看更新的答案 – sll 2013-03-03 12:27:37

0

單元測試的思想是每個測試檢查一個功能。如果您在測試之間創建了依賴關係,則不再肯定它們會一直通過(它們可能會以不同的順序執行,等等)。

你可以在你的具體情況下做的是保持你的Test1原樣。它只關注註冊過程的功能。你不必在任何地方保存那ServiceKey。只是在測試方法內部斷言。

對於第二次測試,您必須設置(僞裝)您需要的所有設備才能成功運行。遵循"Arrange Act Assert"-Principle是一個好主意,您可以在其中設置數據以進行測試,對其執行操作,然後檢查一切是否按預期工作(它還爲您的測試增加了更多的清晰度和結構)。

因此,最好假冒ServiceKey您將在第一次測試中獲得。這樣,控制要測試的數據也更容易。使用模擬框架(例如vs2012中的moq或fakes)以您需要的方式安排您的數據。 moq是一個非常輕量級的嘲笑框架。如果你還沒有使用任何嘲笑的工具,你應該檢查它。

希望這有助於。

相關問題