2012-07-06 56 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