2013-01-24 34 views
4

我想第一次使用MVVM模式的WPF項目的specflow。所以,我有版本庫,控制器,視圖和視圖模型。存儲庫調用webservice來訪問數據庫並返回數據。 View模型具有驗證來自用戶的輸入並調用存儲庫方法的方法。在MVVM中使用specflow for WPF

在我的specflow中,我應該做一個完整的調用,包括存儲庫方法,還是應該使用Moq來嘲弄這些方法?是否有意義?

回答

4

簡短的回答: 你可以把你電話打的數據庫,但我會建議嘲笑他們,除非你在你的數據庫有邏輯

長的答案: 有兩個相互競爭的方式看這個問題。首先,您期望使用SpecFlow進行哪種測試,其次是訪問數據庫的容易程度。

如果使用SpecFlow測試你的水平低技術要求,那麼你真的是由例如風格做單元測試規範。所以這真的應該決定你使用模擬來隔離你的單位。 (我個人會堅持使用NUnit這些測試。)

然而,如果你正在使用SpecFlow測試你的業務場景(即驗收測試),那麼你的方案是依賴多個單位提供的功能上。這更像集成或系統測試,因此需要涉及很多組件,理論上,因爲我們正在測試整個系統,所以我們應該包含一個數據庫,特別是如果您甚至有一個存儲過程或您可能想要的視圖以後再進行迴歸測試。

然而,看待這個問題的第二種方式是需要多少痛苦才能使數據庫可用於您的測試。

  • 如果您的開發團隊中有多個人,如果您同時運行測試,您需要採取什麼策略來避免失敗?
    • 例如,您可以在每次運行中生成一個新的唯一客戶,並僅訪問針對該客戶的更新和查詢,那麼您將不會以錯誤的訂單數量結束。
  • 測試運行後您將如何重置數據庫?
    • E.g.如果您使用正確的數據庫類型,則可以在源代碼管理中檢查一個空的.mdb文件,然後只需回滾/還原即可。

我個人發現,對於沒有存儲的特效和觀點的簡單DB,嘲諷是更好的,但只要你添加業務邏輯到數據庫,好,你需要測試莫名其妙的邏輯。

+1

在這種情況下,我已經將specflow用於單元測試和功能測試。對於單元測試,specflow在給定語句中定義並設置測試用例的MOCK數據,然後執行測試。對於功能測試,Given語句定義了更多的用戶輸入,此外,我設置了一個單獨的功能測試數據庫,該數據庫每晚都會部署,因此specflow功能測試可以以自動方式運行。 – Keith