【问题标题】:Mocking in Windows store app在 Windows 商店应用中模拟
【发布时间】:2015-01-20 20:33:41
【问题描述】:

我可能不是第一个在 Windows 商店应用程序中处理模拟以进行测试的人。我想测试我的 ViewModel 并使用一些模拟框架来模拟它们。当然,并非所有可用的(通用)框架都可以在 Windows 商店应用程序项目中使用。我有一个想法如何解决它,但我不确定它是否是最佳解决方案。我的解决方案由这些项目组成。重点是将表现层分为两部分:

演示文稿 - Windows 商店应用程序

仅包含不需要测试的演示视图(页面)和演示部分的启动项目。该项目引用了 PresentationLogic。

PresentationLogic - 可移植类库,目标:Windows 商店应用程序,.NET Framework 4.5

该项目包含应测试的所有演示逻辑,如 ViewModel、Converters、Helper 等

UnitTests - 类库

包含单元测试的经典类库,能够模拟来自 PresentationLogic 的所有接口。该库引用了 PresentationLogic。

将 Views 和 ViewModel 分成两层很奇怪,但我没有找到其他解决方案。

您知道如何处理这个问题吗?将表示层拆分为另一个项目类型的两个层呢?会不会在后续开发中造成一些问题?

【问题讨论】:

    标签: c# unit-testing mvvm mocking windows-store-apps


    【解决方案1】:

    您绝对是在正确的轨道上。几点注意事项:

    使用 MvvmLight(顺便说一下,它是可移植的),您可以使用其内置的 ServiceLocator 和 DependencyInjection 来执行诸如为平台特定进程注入测试控制器之类的事情。通过定义接口和注入实现(包括模拟实现),这将使您的大量逻辑保持可移植性。

    根据您的 PCL,您可能(根据我的经验)无法在您的 PCL 中包含转换器(继承自 IValueConverter)。该库通常在平台之间有所不同(尤其是 Silverlight/WinRT/4.5/Mono),因为它们最常见的用途是用于 UI,例如绑定处理。与DataTemplateSelectors 之类的相同。这些可能需要为您的大多数平台重写(幸运的是,这并不难,而且仍然需要大量的复制粘贴)。

    至于其余部分,您已经掌握了它。您可以将Presentation 应用设为Universal,这样它就可以涵盖Windows 应用商店和Windows Phone 应用商店应用。您的绝大多数“业务逻辑”应该在您的 PCL 中。您可能会在这方面遇到一些问题,因为有时不可避免地希望将一些 UI 助手放入 VM 中以方便使用。如果这是绝对必要的,你可以让你的 Portable ViewModel abstract,然后使用上面提到的依赖注入来插入特定于平台的实现。这很容易做到并且非常有用。

    您缺少的一件事是 UI 测试。您可以将它们包含在您的单元测试类库中,或制作另一个 Coded UI Test 类库,由您自己决定。

    无论如何,希望对您有所帮助。

    【讨论】:

    • 感谢您提供真正有用的信息和提示。很好的答案!
    【解决方案2】:

    仅供参考,您现在可以使用 JustMock 直接模拟 Windows 8.1 单元测试项目。

    my answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多