我可能不是第一个出于测试目的而在 Windows 商店应用程序中处理模拟的人。我想测试我的 ViewModel 并使用一些模拟框架来模拟它们。当然,所有可用的(通用)框架都不能在 Windows 应用商店应用程序项目中使用。我有一个想法如何解决它,但我不确定这是最好的解决方案。我的解决方案由这些项目组成。要点是将表示层分为两部分:
推介会- Windows 商店应用程序
仅包含演示视图(页面)和不需要测试的演示部分的启动项目。该项目参考了PresentationLogic。
呈现逻辑- 可移植类库,目标:Windows 商店应用程序、.NET Framework 4.5
该项目包含所有应该测试的表示逻辑,如 ViewModels、转换器、助手等
单元测试- 类库
包含单元测试的经典类库,能够模拟来自PresentationLogic的所有接口。该库引用了PresentationLogic。
将 Views 和 ViewModel 分为两层是很奇怪的,但我没有找到其他解决方案。
您知道如何处理这个问题吗?将表示层拆分为另一种项目类型的两层怎么样?会不会给后续的发展带来一些问题?
您绝对走在正确的道路上。一些注意事项:
使用 MvvmLight(顺便说一句,它是可移植的),您可以使用其内置的 ServiceLocator 和 DependencyInjection 来执行诸如为平台特定进程注入测试控制器之类的操作。通过定义接口和注入实现(包括模拟实现),这将允许大量逻辑保持可移植性。
根据您的 PCL,您可能(根据我的经验)无法包含转换器(继承自IValueConverter
)在你的PCL中。该库通常在平台之间有所不同(尤其是 Silverlight/WinRT/4.5/Mono),因为它们最常见的用途是用于 UI,例如绑定处理。与类似的事情相同DataTemplateSelector
s。这些可能需要针对大多数平台进行重写(尽管幸运的是这并不难,而且仍然是相当多的复制粘贴)。
至于剩下的部分,你已经说得一清二楚了。你可以拥有你的Presentation
app be Universal
,因此它可以涵盖 Windows 应用商店和 Windows Phone 应用商店应用程序。绝大多数“业务逻辑”应该位于 PCL 中。您可能会在这方面遇到一些问题,因为有时不可避免地需要在虚拟机中放置一些 UI 帮助程序以方便使用。如果这是绝对必要的,您可以制作便携式 ViewModelabstract
,然后使用上面提到的依赖注入来插入特定于平台的实现。这很容易做到并且非常有用。
您缺少的一件事是 UI 测试。您可以将它们包含在单元测试类库中,或者创建另一个编码的 UI 测试类库,具体取决于您。
无论如何,希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)