簡體   English   中英

如何在.Net中編寫數據訪問層測試?

[英]How to write Tests for Data Access Layer in .Net?

是否有為數據訪問層編寫單元測試的框架? 這有幾個問題。
1.如何填充數據庫?
2.我們如何確保一個測試不修改db中可能無法通過另一個測試的值?

是否有一個可以處理上述問題的良好框架?

更新 :我遇到了nDBUnit,它可以解決測試數據訪問層的基礎設施問題。

http://code.google.com/p/ndbunit/wiki/QuickStartGuide

我想我會插話,因為到目前為止我真的不喜歡一些答案。

無論你稱之為“單元測試”還是“集成測試”或“supercalifragilisticexpialidocious測試”,在這種情況下都無關緊要; 數據訪問組件只有一個有效的測試,它是在實際數據上測試它。 顯然不是生產數據,而是合理的傳真。

您需要做的第一件事是將數據庫本身置於源代碼管理之下 可悲的是,沒有這方面的框架; 微軟在某些版本的VSTS中占據了一席之地,但最終結果仍然缺乏。 至少在今天的世界里,你將不得不自己做很多這方面的工作。 但要認真對待 - 當主要更新變得拙劣並且您需要回滾數據庫時,您不會后悔。

您在源代碼管理下放置的內容應該是生成最新架構所需的一切,通常是基線腳本,加上“配置數據”腳本(即枚舉表的內容),以及升級腳本以反映最近的架構更改。 這為您提供在臨時數據庫上執行“實時”測試所需的幾乎所有內容; 您的測試只需要從源代碼控制下載這些腳本並在測試服務器和/或不同的數據庫實例上運行它們,通常使用SQL管理對象來運行所述腳本(SMO可以處理GO語句等;常規SqlConnection不能) 。

各種工具可以幫助您在測試數據庫中生成測試內容 可能最受歡迎的是Red Gate的SQL數據生成器 這些工具還可以生成用於創建數據的腳本 ,這是您在測試中使用的內容。 或者,如果您這樣選擇,則可以從生產數據庫中清除數據並使用SQL Server Management Studio編寫您選擇保留用於測試的任何數據。 無論哪種方式,將測試數據腳本保存在源代碼管理中,與架構腳本相同,並且當您需要測試DAL時,請在啟動數據庫實例后下載這些腳本並使用它們填充數據。

我希望一個單一的框架,將做到這一切給你,但與工具,庫和良好的發展實踐正確的集合, 可以使之成為一個更痛苦的過程這一點。

真正的單元測試不會訪問數據庫。 也就是說,mbUnit有一個rollback屬性,可用於訪問db的測試。

在測試將訪問數據庫的存儲庫時,必須始終確保在單元測試完成后清除數據庫。 您可以通過在事務下運行測試來執行此操作,也可以使用MbUnit Rollback屬性自動回滾更改。

別。 單元測試不訪問數據庫。 這就是集成或功能測試的用途。

我有一組測試可以驗證管理數據庫通信的代碼是做正確的事情,然后盡可能不經常觸摸它。

在“單元測試”中不這樣做的原因是,通過這樣做,你冒着稀釋“單元測試”這個短語含義的風險,將它們變成一個測試的抓包,這通常會使它們變慢並防止開發人員盡可能頻繁地運行它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM