[英]Unit Testing Legacy Code without DI
我們正在嘗試將單元測試添加到我們的業務層中。 技術堆棧是asp.net Web表單,WCF,ADO.Net調用存儲過程)。 業務層在數據類上調用靜態方法,因此很難在不進行大量更改的情況下引入DI。
它可能不是一種傳統的方法,但我想將DB保留在單元測試(依賴)中,但將其用作測試Db ...使用現有的凍結數據庫或在表中模擬數據。 我想知道使用測試數據庫的可行性,其中存儲過程像Mocks一樣使用。 不要復制整個數據庫,只需創建由存儲過程命名的表名。 存儲過程只調用一個表,並返回靜態數據......本質上,嘗試使用類似Moq但從DB角度模擬Mocking數據的功能。
任何人都可以推薦任何在測試中包含數據庫的設計,這仍然是確定性的嗎?
如果你想在測試中使用數據庫並確保所有內容都是確定性的,那么你需要每個測試都有自己的數據庫,這意味着為每個測試創建(並可能填充)一個新的數據庫。
根據數據庫層創建連接的方式,這是可行的。 我通過在測試設置中使用localDb生成一個DB,並使用名稱的GUID,然后在拆除測試結束時再次刪除DB。
它最終變得相當慢(不足為奇)但是在Ram磁盤驅動器上創建的DB有助於此。
這適用於空dbs,然后有EF創建的模式,但是如果你需要DB中的一組固定數據,那么你可能需要在測試設置中從備份中恢復它
在我看來,在為每個測試調用它們時,設置存儲過程以執行您希望它們執行的操作將會有很多工作,並且您仍然會遇到數據庫始終存在的速度問題。 我建議您改為執行以下一項或兩項操作:
第一種方法為您提供真正的“單元”測試的速度和可模擬性,而第二種方法允許您運行更多的代碼,增加了捕獲錯誤的可能性,即使在存儲過程等方面也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.