今年夏天,我開發了一個基本的ASP.NET/SQL Server CRUD應用程序,單元測試是其中一個要求。當我試圖對數據庫進行測試時遇到了一些麻煩。據我瞭解,單元測試應該是:單元測試數據庫
- 無國籍
- 相互獨立
- 重複相同的結果,即沒有更改保存
這些要求似乎是在每個賠率其他當爲數據庫開發時。例如,我不能測試Insert()而不確定要插入的行不存在,因此我需要先調用Delete()。但是,如果他們不在那裏呢?然後我需要先調用Exists()函數。
我最終的解決方案涉及非常大的設置函數(yuck!)和一個空的測試用例,它將首先運行,並表明安裝程序沒有問題。這是犧牲了測試的獨立性,同時保持了他們的無狀態。
我發現的另一個解決方案是將函數調用包裝在易於回滾的事務中,如Roy Osherove's XtUnit。這項工作,但它涉及另一個圖書館,另一個依賴,並且對於手頭問題的解決方案似乎有點過分。
那麼,面對這種情況,SO社區做了什麼?
tgmdbm說:
通常可以使用自己喜歡的 自動化單元測試框架 進行集成測試,這是 爲什麼有些人感到困惑,但他們 不遵循相同的規則。你是 允許涉及你的許多類 (因爲他們已經過單元測試)的具體實施 。 您正在測試您的具體 類如何相互交互,以及 與數據庫。
所以,如果我讀這正確的,實在是沒有辦法有效單元測試數據訪問層。或者,數據訪問層的「單元測試」是否涉及測試,比如由類生成的SQL /命令,而與數據庫的實際交互無關?