2010-05-21 149 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.如果我们将该命令绑定到视图模型中的错误处理程序,该程序将无法正常工作。所有这些都需要进行测试。但是如果我们只测试视图模型,程序仍然没有测试。那么有什么好处呢?