2012-07-06 78 views
1

我已經開始學習TDD,並且碰到了ViewModel測試。我使用Caliburn.Micro作爲我的MVVM框架,並且我的ViewModel繼承自Screen。單元測試ViewModels從屏幕繼承(Caliburn.Micro)

當我創建嘗試測試一個視圖模型,我得到這個錯誤:

The type 'Caliburn.Micro.Screen' is defined in an assembly that is not referenced. You must add a reference to assembly 'Caliburn.Micro'

這樣行嗎?我覺得從框架隔離我的班是正確的道路,但我不知道我應該怎麼做(保留框架給出了從屏幕繼承的好處)

感謝, 馬丁

回答

1

是它可以添加參考。唯一的選擇是動態創建類型,這並不能真正爲您提供很多優勢。

我假設你的ViewModel不會嘗試顯示任何屏幕。如果是這樣,您需要將其子類化以獲得可以進行單元測試的版本。

我還沒有使用Caliburn.Micro,但您的ViewModel繼承自Screen,聽起來有點奇怪。通常使用MVVM,ViewModel知道視圖但不從其中繼承。快速谷歌搜索表明,在Caliburn.Micro中,ViewModel實現了IScreen界面,而不是從屏幕繼承。

+0

嗨邁克爾,感謝您的回答。我一直在閱讀Caliburn.Micro的文檔,我認爲從Screen繼承是非常常見的(參見[here](http://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&referringTitle=Documentation ))。 – 2012-07-06 02:37:31

+0

@Michael,Caliburn Screen僅僅意味着這個ViewModel是一個矮胖/聚合的VM--相當於一個WebPage。它只是一個接口,具有一些額外的要求,如CanClose()AFAIR。 – Gishu 2012-07-06 06:14:08

0

在屏幕上的依賴關係是否也牽涉到其他一些事情......如果不是,可能不是什麼大不了的事。

ViewModels是表示層的一部分,通常與您使用的GUI框架結合在一起。推論:當GUI框架發生變化時,可能需要重做/拋棄ViewModels,除非您爲其設計(分開來自演示文稿的業務邏輯並將其推下)。如果你被這個段激怒,檢查Robert Martin's talk on Clean architecture在NDC奧斯陸(可在線)

+0

嗨Gishu。我無法在網上找到這個話題。你會給我一個鏈接?謝謝。至於測試ViewModel,你會說從Tests項目引用Caliburn.Micro dll是否可行?我目前正在將業務邏輯分離到另一個層,但我也希望ViewModel可以解耦。 – 2012-07-06 13:19:08

+0

@tinchou - 用鏈接更新 – Gishu 2012-07-06 15:02:45