我正在面對數據訪問層做單元測試,所有的數據訪問層都通過存儲過程調用數據庫。 我打算創建一個乾淨的數據庫用於單元測試,但我發現大多數存儲過程會遠程調用其他數據庫,我不知道如何單元測試這種存儲過程,我應該創建所有相關的數據庫?或任何其他解決方案?如何做遠程存儲過程的單元測試
回答
一般情況下,更可以抽象的數據訪問層從應用程序的其餘部分之遙,你可以更好的單元測試。正如Jayden在另一個答案中所寫的那樣,Test Doubles如動態模擬是一個很好的解決方案。
不過,我明白你的問題,要明確進行單元測試數據訪問層,和那也可以。在這種情況下,動態模擬不會幫助你,因爲你將在應用程序中測試最低層 - 沒有什麼可以模擬出來的。有些人堅持認爲這不是一個單元測試而是一個集成測試,但我認爲重要的部分是測試是否是自動的還是沒有,不是我們稱呼它。
在任何情況下,一旦開始測試數據訪問層,您或多或少必須按原樣處理它。如果它使用遠程存儲過程,那麼你將不得不處理。爲了使設置更簡單一點,您可能希望將'remote'數據庫放在與'local'數據庫相同的盒子中。
單元測試主要是一個行爲測試,所以這樣可以。就必須有其他類型的測試(集成測試或系統測試)使用一個現實的設置與許多分佈式機等用於驗證安全,網絡等按預期工作,但是這不應該是主要焦點的單元測試。
你可以考慮構建數據庫引用其他的,讓所有的遠程表都可以通過視圖的訪問。我通常遵循的命名約定:
vw_[DATABASENAME]_[TABLENAME]
視圖由不外乎:
select * from server.dbo.tablename
所有存儲過程通過視圖訪問遠程表,而不是直接,即在訪問Person表遠程數據庫調用工作人員將:
create view vw_STAFF_Person
as
select * from Staff.dbo.Person
go
create procedure stp_Select_Staff
as
select * from vw_Staff_Person
go
而不是
create procedure stp_Select_Staff
as
select * from Staff.dbo.Person
go
這樣做的基本原理是,當您要測試數據庫時,您可能希望將所有遠程數據庫重新鏈接到「測試」遠程數據庫。當訪問遠程數據的唯一對象是簡單視圖時,這通常比較容易,而不是通常更多和更復雜的存儲過程。
我通常有一份工作設置一個可以重寫的意見,「測試」數據庫,所以它是自動完成的。
附加到這一點,我也經常有工作建立,恢復生產數據庫備份,以「測試」環境,使測試能夠對包含實時數據的副本系統進行部署前。只需重新鏈接視圖,而不是將所有存儲的proc引用引用到遠程系統,此過程再次變得更加簡單。
爲了使對安全性測試更容易,我也始終將數據庫的安全性在數據庫roles
的水平,而不是特定的用戶,因爲我覺得整個的生產,測試和開發環境roles
更便攜比users
。
希望一些這些提示的幫助。
- 1. 存儲過程和單元測試
- 2. SQL單元測試存儲過程
- 3. 單元測試和存儲過程
- 4. 單元測試存儲過程
- 5. C++遠程單元測試
- 6. CLR SQL存儲過程測試與單元測試項目
- 7. 單元測試使用存儲過程的CakePHP應用程序
- 8. 在Linq/Lambda中寫入存儲過程(單元可測試但存儲過程存儲過程)。可能?
- 9. 有git的遠程測試存儲庫
- 10. 測試存儲過程
- 11. 使用getdate進行單元測試存儲過程的最佳做法()
- 12. SQL Server中存儲過程的單元測試
- 13. 幾個存儲過程之間的單元測試結果?
- 14. 單元測試TOAD中的Oracle SQL存儲過程
- 15. 遠程認證的單元測試
- 16. 在VS 2010中使用存儲過程測試驅動的單元測試
- 17. c#單元測試,嘲諷存儲過程
- 18. 使用Visual Studio 2010單元測試Oracle存儲過程
- 19. 在單元測試存儲過程時回滾嵌套事務
- 20. 單元測試java類擴展存儲過程與EasyMock
- 21. 如何做單元測試
- 22. Maven:遠程運行單元測試
- 23. Eclipse與遠程單元測試
- 24. 與testng做多線程單元測試
- 25. 單元測試 - 存儲SqlDataReader
- 26. 如何進行單元測試當NHibernate Mapping使用存儲過程時
- 27. 測試存儲過程的邏輯
- 28. .net單元測試 - 如何做UI單元測試
- 29. 如何使用jmockit做單元測試單元測試
- 30. U-SQL過程的單元測試
+1否定-1有人給出了這個答案,但沒有留下評論。傑登的權利(雖然我會使用Moq):) - 如果您使用的是數據庫,那麼您不會進行純粹的**單元**測試。您可能想要在DAL上執行**集成**測試,這沒關係。對於您的測試數據庫,只需使用返回靜態數據的存根sproc替換實際的sproc。 – TrueWill 2009-09-15 03:18:33