在Windows商店应用程序中进行模拟

时间:2014-05-13 21:17:07

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

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

演示文稿 - Windows商店应用

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

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

该项目包含所有应该测试的ViewModels,Converters,Helpers等表示逻辑

UnitTests - 类库

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

将Views和ViewModel分成两层是很奇怪的,但我没有找到另一种解决方案。

你有任何想法如何处理这个问题吗?如何将表示层拆分为另一个项目类型的两个层?它会在进一步发展中引起一些问题吗?

2 个答案:

答案 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