2016-05-16 69 views
1

我需要一些測試建議。測試數據庫存在TDD

我知道在單元測試中打擊數據庫通常是不好的做法,除非特殊情況。

我正在採用TDD方法來使用EF的MVC項目。我的第一個測試是:

void DatabaseShouldExist() { ... } 

我想知道...這是一個特殊的情況?

我想檢查EF生成的數據庫,我的下一個測試將檢查它是否包含正確的種子數據。

你會如何去測試這個?

它應該被測試嗎?

+0

嘲笑框架。 NSubstitute。 – Karolis

+1

我不同意。如果你正在測試一個DAO,除了命中數據庫之外別無他法。一旦完成,那麼依賴於DAO的類可以依賴於mock。我不會寫測試來查看數據庫是否存在。我會先假設它。 – duffymo

+0

*整合測試*完全不是壞習慣。唯一的問題是,它與「單元」測試不同,但它非常有用。此外,我完全同意@duffymo。如果數據庫沒有創建,你會注意到它,不用擔心。 –

回答

1

你想測試行爲,所以不是如果數據庫存在或不存在它自己。如評論中所建議的,從商業邏輯開始。 TDD開始小並且是迭代的,不潛入DB邏輯測試1.

簡單的例子(對於一個應用程序中存儲的電影)

Test 1 - shouldAddAMoveToList() 
Test 2 - shouldBeAbleToRetrieveAMovieFromList() 
Test 3 - shouldPersistAMovieBeweenSessions() // Could Be DB here 

當使用TDD,挑第一簡單的東西。數據庫部分應該稍後進場。

就我個人而言,我會避免使用單元測試對數據庫進行測試,並將其保存爲集成測試。 DAO模式對此很有用,因爲你可以堅持記憶,或者在單元測試中簡單地模擬DB端。

單元測試應該儘量堅持FIRST principle,引入數據庫可以減緩測試,並防止他們是獨立的(除非清除DB每次) - 在最起碼嘗試使用內存數據庫單元測試

+0

對不起DAO模式是什麼? –

+0

數據訪問對象 - 請參閱此鏈接。 http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm – MikeJ

+1

感謝Mike。我正在使用實體框架進行數據訪問。它使用POCO,所以在這個意義上,嘲笑倉庫似乎是明智的。 –