當我的方法從一開始看起來不正確時,我必須開始使用QualityTools.UnitTestFramework爲我們開發的Web服務層編寫一些單元測試。單元測試複雜交互的正確方法
似乎單元測試應該能夠以任何順序運行,而不依賴於其他測試。
我最初的想法是有類似於以下測試(簡化expample)的東西,它將以相同順序作爲有序測試運行。
AddObject1SuccessTest
AddObject2WithSameUniqueCodeTest
(依賴於擁有創建object1第一測試第一然後期望失敗)
AddObject2SuccessTest
UpdateObject2WithSameUniqueCodeTest
(依賴於第一測試已經創建object1並且具有創建THRID測試object2先預計失敗)
UpdateObject2SuccessTest
GetObjectListTest
DeleteObjectsTest
(使用添加的ID)
然而,測試和說添加的ID到deletetest例如傳球的沒有明顯的方法之間不存在狀態。
那麼,單元測試複雜交互的正確方法是否是由場景決定的?
例如
AddObjectSuccessTest
(其創建一個對象,獲取它來驗證的數據,然後將其刪除)
AddObjectWithSameUniqueCodeTest
(它創建的對象1,則嘗試創建對象2然後刪除對象1)
UpdateObjectWithSameUniqueCodeTest
(它創建對象1然後創建對象2,然後嘗試更新對象2,使其具有與對象1相同的唯一代碼,然後刪除對象1和對象2)
我是否出現了這種錯誤?
由於
有時建立先決條件狀態可能會很昂貴。你對如何處理這種情況有任何想法嗎? – 2009-11-03 19:42:50
如果可能的話,所謂的不可變共享夾具是最好的方法。同時,很多併發最佳實踐也適用於管理測試夾具:如果可能,不要共享狀態。如果你必須共享狀態,它是最簡單的,如果它是隻讀的等等。不可變的共享夾具是一個永遠不會改變的夾具。然後,您可以在不可變共享夾具上建立一次性夾具,確保這些夾具在每個測試案例之後被拆除。通常它是最昂貴的Fixture的不可變部分(例如,建立一個DB),所以這種模式運行良好。 – 2009-11-03 20:31:49