2010-05-21 177 views
1

當MVVM中的視圖不是單元測試時,爲什麼單元測試很有用?當視圖不是MVVM中的單元測試時,爲什麼單元測試很有用?

在MVVM中,我們有模型,視圖模型和視圖。聲稱的優點是MVVM可以使模型和視圖=模型單元可測試。但是所有三方都屬於同一個應用程序。如果視圖不是單元可測試的,爲什麼要測試其他兩個?將單元測試其他兩個,並留下一個未測試提高質量?

從視圖中刪除所有代碼隱藏聽起來很奇怪。代碼隱藏如何處理純粹的UI操作?

回答

0
  1. MVVM中的視圖是愚蠢的,你給他們的數據,他們展示給用戶,完成。
  2. 操作很安靜,你可以在單元測試中測試。
  3. 您可以測試使用什麼視圖路線的想法
+0

「什麼視圖用於路線」?你不覺得MVVM和ASP.NET MVC混淆? – 2010-05-21 00:43:36

+0

好..有時候你不想公開模型類(例如:如果你使用Linq2SQL),所以視圖與專業視圖模型一起工作。你有一個混合MV-VM-C – Perpetualcoder 2010-05-21 04:36:11

0

一旦採用MVVM,您會發現您的視圖變得非常輕,並且大量邏輯移入視圖模型中。 「純粹的用戶界面操作」更像是一種想象中的威脅,而不是真正的威脅。

在視圖中但不是單元測試的那些東西是動畫和綁定。使用聲明性表單(即XAML)有助於降低系統的整體不穩定性。一旦這些工作,他們繼續工作。此外,採用應用程序邏輯並將其與UI「糖」分開可以確保您改變的應用程序邏輯不會破壞UI邏輯的穩定性。

此外,如果你在代碼中有一個非常複雜的動畫,那麼你就不能阻止你以單元測試的方式來抽象它。

+0

我同意這個想法是將'邏輯'推入一個單獨的課堂,在那裏可以對其進行測試,而不需要繁瑣的觀點。 另一個有效的用途是能夠無縫地替換視圖的「行爲」。您可能有一個相當普遍的觀點,即您希望改變行爲,具體取決於上下文。您可以使用狀態字段將該邏輯打包到後面的代碼中,但交換ViewModel會更清晰。 – Agies 2010-05-21 02:08:25

+0

有很多地方我們可以在視圖中犯錯誤: 1.觸發器實際上是程序邏輯。 2.如果我們將綁定路徑設置錯誤,我們將不會收到任何運行時錯誤,但視圖不會顯示正確的數據。 3.如果我們將該命令綁定到視圖模型中的錯誤處理程序,則該程序將無法正常工作。 所有這些都需要測試。但是如果我們只測試視圖模型,程序仍然沒有測試。那麼有什麼好處呢? – BigTiger 2010-05-21 13:30:22

0

有很多地方我們可以在視圖中犯錯誤:1.觸發器實際上是程序邏輯。 2.如果我們將綁定路徑設置錯誤,我們將不會收到任何運行時錯誤,但視圖不會顯示正確的數據。 3.如果我們將該命令綁定到視圖模型中的錯誤處理程序,該程序將無法正常工作。所有這些都需要進行測試。但是如果我們只測試視圖模型,程序仍然沒有測試。那麼有什麼好處呢?