我可能不是第一个在Windows应用商店中处理模拟以进行测试的人。我想测试我的ViewModel并使用一些模拟框架来模拟它们。当然,所有可用(通用)框架都无法在Windows应用商店应用项目中使用。我有一个想法如何解决它,但我不确定它是最好的解决方案。我的解决方案包括这些项目。要点是将表示层分为两部分:
演示文稿 - Windows商店应用
启动项目,仅包含不需要测试的演示文稿视图(页面)和演示文稿部分。该项目参考了PresentationLogic。
PresentationLogic - 可移植类库,目标:Windows应用商店,.NET Framework 4.5
该项目包含所有应该测试的ViewModels,Converters,Helpers等表示逻辑
UnitTests - 类库
包含单元测试的经典类库,能够模拟PresentationLogic中的所有接口。该库引用了PresentationLogic。
将Views和ViewModel分成两层是很奇怪的,但我没有找到另一种解决方案。
你有任何想法如何处理这个问题吗?如何将表示层拆分为另一个项目类型的两个层?它会在进一步发展中引起一些问题吗?
答案 0 :(得分:1)
你肯定是在正确的轨道上。几个笔记:
使用MvvmLight(顺便说一下,它是可移植的),您可以使用它们内置的ServiceLocator和DependencyInjection来执行诸如为特定于平台的进程注入测试控制器之类的操作。通过定义接口和注入实现(包括模拟实现),这将允许大量逻辑保持可移植性。
根据您的PCL,您可能(根据我的经验)无法在您的PCL中包含转换器(继承自IValueConverter
)。这些平台之间的库通常是不同的(特别是Silverlight / WinRT / 4.5 / Mono),因为它们最常见的用途是UI,例如绑定处理。与DataTemplateSelector
s之类的内容相同。这些可能必须在大多数平台上进行重写(尽管幸运的是,这并不是那么难,而且还有很多复制粘贴)。
至于其余部分,你可以看到它。您可以将Presentation
应用设为Universal
,因此它可以涵盖Windows应用商店和Windows Phone应用商店应用。绝大多数您的业务逻辑'应该在你的PCL中。在这方面您可能会遇到一些问题,因为有时候想要在VM中放置一些UI帮助程序以便于使用是不可避免的。如果这是绝对必要的,您可以创建Portable ViewModel abstract
,然后使用上面提到的依赖注入来插入特定于平台的实现。这很容易做到非常有用。
您缺少的一件事是UI测试。您可以将它们包含在单元测试类库中,或者创建另一个Coded UI Test类库,直到您。
无论如何,希望有所帮助。
答案 1 :(得分:1)
仅供参考,您现在可以使用JustMock直接模拟Windows 8.1单元测试项目。
请参阅my answer