2011-01-10 116 views
2

我正在測試一些CRUD操作。我的問題是:單元測試(C#)

1)如果我需要測試添加,獲取和刪除方法。持久層是一個數據庫。因爲我需要一個測試對象來獲取和刪除,我應該把所有這三個組合成一個[TestMethod],還是將它們分成3個方法,並在Get和Delete測試之前重新添加對象?

+0

你好:)我會分開並單獨測試,並在每個之前清理乾淨,然後清理。 – 2011-01-10 17:17:09

+1

我不確定涉及數據庫的測試是否仍然可以稱爲「單元測試」... – Lukasz 2011-01-10 17:22:58

+0

@Lukas Baran測試DAO而不去數據庫不會顯示隱藏在查詢,DDL等中的錯誤。內存DB或提交前。誠然,UnitTesting DAO與集成測試代碼有許多共同之處,但仍然可以爲這些代碼使用UnitTesting框架。 – tobsen 2011-01-10 17:36:33

回答

4

理想情況下,您應該對每種情況進行單獨測試。

你應該使用某種模擬 - 無論是通過框架還是通過自己設置數據庫 - 設置每個測試的初始條件。

所以測試添加要開始一個空白數據庫,然後添加一些新數據,再次嘗試添加相同的數據(應該失敗),加上數據不完整等

再進行試驗,獲取和刪除您將從預填充的數據庫開始,並執行您所需的各種測試。

1

無論讓你的測試更容易:)只要你得到一個返回說明哪種方法通過/失敗,那麼它應該是好的。

+0

只是爲了增加思考的食物,我個人使用nunit進行測試,這裏是一個測試方法的例子http://www.nunit.org/index.php?p=quickStart&r=2.2.10 – Dasupalouie 2011-01-10 17:18:45

2

我通常會做一個單獨的測試。如果我測試一個「get」類型的方法,測試設置會插入對象(通常通過一些模擬框架的方式),我希望得到必要的時候,它不會像實際得到的那樣將。

這確實意味着如果添加實現中斷,假設適當的覆蓋率,get和add的測試都會以某種方式失敗。但是這就是你想要的東西,對吧?

1

你好:)我會分開和測試各自,並設置乾淨,然後清理之後。

2

如果您正在編寫自己的ORM來處理CRUD,我建議您在不同的測試中將每個操作分開。不要創建大的測試,它有很多失敗點和很多改變的原因,因爲它會讓你的測試項目難以維護。分別測試每個功能。

現在,如果您正在使用某個第三方ORM來處理CRUD,那麼除非您不信任它,否則不應該測試該工具。但是,在這種情況下,你應該找到更好的選擇。 :)

您可以執行一些驗收測試來檢查一切是否正常,並且此時您將真正到達數據庫。