【问题标题】:Why is the unit test useful when the view is not unit testable in MVVM?当视图在 MVVM 中不可单元测试时,为什么单元测试很有用?
【发布时间】:2010-05-21 21:31:22
【问题描述】:

当视图在 MVVM 中不可单元测试时,为什么单元测试很有用?

在 MVVM 中,我们有模型、视图模型和视图。声称的优势是 MVVM 可以使模型和 view=models 单元可测试。但三方都属于同一个应用程序。如果视图不可单元测试,为什么要测试其他两个?对其他两个进行单元测试而让一个不测试会提高质量吗?

从视图中删除所有代码隐藏对我来说听起来很奇怪。代码隐藏只处理纯 UI 操作怎么样?

【问题讨论】:

    标签: mvvm


    【解决方案1】:
    1. MVVM 中的视图是愚蠢的,你给他们数据,然后他们会向用户展示,完成了。
    2. 动作是安静的,你可以在单元测试中测试它。
    3. 您可以测试用于路线的视图

    【讨论】:

    • “路线使用什么视图”?您不会将 MVVM 与 ASP.NET MVC 混淆吗?
    • 好吧.. 有时您不想公开模型类(例如:如果您使用 Linq2SQL),因此视图与专用视图模型一起使用。这里您有一个混合 M-V-VM -C
    【解决方案2】:

    部分想法当然是您的视图应该如此微不足道,以至于“不需要”进行单元测试。但是,可以对 GUI 进行单元测试,请参阅 http://www.c2.com/cgi/wiki?TestFirstUserInterfacesPrinciples

    【讨论】:

      【解决方案3】:

      一旦您采用了 MVVM,您会发现您的视图变得非常轻量,并且很多逻辑都转移到了视图模型中。 “纯粹的 UI 操作”与其说是真实的威胁,不如说是想象中的威胁。

      在视图中但不能进行单元测试的内容包括动画和绑定。对两者使用声明性形式(即 XAML)有助于降低系统的整体不稳定性。一旦这些工作,他们继续工作。此外,获取应用逻辑并将其与 UI“糖”分离对于确保更改的应用逻辑不会破坏 UI 逻辑大有帮助。

      此外,如果您的代码中有一个非常复杂的动画,则没有阻止您以可单元测试的方式对其进行抽象。

      【讨论】:

      • 我同意这个想法是将“逻辑”推到一个单独的类中,可以在其中对其执行测试,而没有繁琐的视图。另一个有效的用途是无缝换出视图的“行为”的能力。您可能有一个相当通用的视图,您希望根据上下文改变其行为。您可以使用 state 字段将该逻辑打包到后面的代码中,但是换出 ViewModel 会更简洁。
      • 视图中有很多地方容易出错: 1、触发器其实是程序逻辑。 2. 如果我们把绑定路径放错了,我们不会收到任何运行时错误,但是视图根本不会显示正确的数据。 3. 如果我们将命令绑定到视图模型中的错误处理程序,程序将无法按预期工作。所有这些都需要测试。但是如果我们只测试视图模型,程序仍然没有被测试。那有什么好处呢?
      【解决方案4】:

      在视图中有很多地方我们可以犯错误: 1.触发器实际上是程序逻辑。 2. 如果我们把绑定路径放错了,我们不会收到任何运行时错误,但是视图根本不会显示正确的数据。 3. 如果我们将命令绑定到视图模型中的错误处理程序,程序将无法按预期运行。所有这些都需要测试。但是如果我们只测试视图模型,程序仍然没有被测试。那有什么好处呢?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        • 2010-09-11
        相关资源
        最近更新 更多