我在寫一組單元測試來測試CRUD系統。使用TestContext在單元測試之間共享信息
我需要Test1
註冊用戶 - 它返回一個ServiceKey
然後我需要在Test2
添加數據,我需要ServiceKey
什麼是傳遞ServiceKey
的最佳方式的有哪些?我試圖在TestContext
中設置它,但它似乎在測試之間消失。
我在寫一組單元測試來測試CRUD系統。使用TestContext在單元測試之間共享信息
我需要Test1
註冊用戶 - 它返回一個ServiceKey
然後我需要在Test2
添加數據,我需要ServiceKey
什麼是傳遞ServiceKey
的最佳方式的有哪些?我試圖在TestContext
中設置它,但它似乎在測試之間消失。
你不應該在單元測試之間共享一個狀態,單元測試是單元測試的一個非常重要的屬性 - 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;
}
單元測試的思想是每個測試檢查一個功能。如果您在測試之間創建了依賴關係,則不再肯定它們會一直通過(它們可能會以不同的順序執行,等等)。
你可以在你的具體情況下做的是保持你的Test1
原樣。它只關注註冊過程的功能。你不必在任何地方保存那ServiceKey
。只是在測試方法內部斷言。
對於第二次測試,您必須設置(僞裝)您需要的所有設備才能成功運行。遵循"Arrange Act Assert"-Principle是一個好主意,您可以在其中設置數據以進行測試,對其執行操作,然後檢查一切是否按預期工作(它還爲您的測試增加了更多的清晰度和結構)。
因此,最好假冒ServiceKey
您將在第一次測試中獲得。這樣,控制要測試的數據也更容易。使用模擬框架(例如vs2012中的moq或fakes)以您需要的方式安排您的數據。 moq是一個非常輕量級的嘲笑框架。如果你還沒有使用任何嘲笑的工具,你應該檢查它。
希望這有助於。
但我必須複製代碼來測試創建用戶。 - 我討厭複製+粘貼代碼 – GreyCloud 2013-03-01 15:37:04
查看更新的答案 – sll 2013-03-03 12:27:37