Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows应用商店应用程序中进行模拟_C#_Unit Testing_Mvvm_Mocking_Windows Store Apps - Fatal编程技术网

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

C# 在Windows应用商店应用程序中进行模拟,c#,unit-testing,mvvm,mocking,windows-store-apps,C#,Unit Testing,Mvvm,Mocking,Windows Store Apps,我可能不是第一个为测试目的而在windows应用商店中处理模拟的人。我想测试我的ViewModels,并使用一些模拟框架来模拟它们。当然,所有可用(通用)框架都无法在windows应用商店应用程序项目中使用。我有一个解决办法,但我不确定这是不是最好的办法。我的解决方案由这些项目组成。要点是将表示层分为两部分: 演示文稿-Windows应用商店应用程序 启动仅包含不需要测试的演示视图(页面)和演示部分的项目。本项目参考PresentationLogic PresentationLogic-可移植类

我可能不是第一个为测试目的而在windows应用商店中处理模拟的人。我想测试我的ViewModels,并使用一些模拟框架来模拟它们。当然,所有可用(通用)框架都无法在windows应用商店应用程序项目中使用。我有一个解决办法,但我不确定这是不是最好的办法。我的解决方案由这些项目组成。要点是将表示层分为两部分:

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

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

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

该项目包含所有应该测试的表示逻辑,如视图模型、转换器、帮助器等

单元测试-类库

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

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


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

你肯定走在正确的轨道上。几点注意:

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

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

至于其余的,你说得对。您可以让您的
演示文稿
应用程序成为
通用
,这样它就可以同时涵盖Windows应用商店和Windows Phone应用商店应用程序。您的“业务逻辑”绝大多数应该在您的PCL中。在这方面,您可能会遇到一些问题,因为有时为了便于使用,想要在VM中放置一些UI帮助程序是不可避免的。如果这是绝对必要的,您可以将便携式ViewModel
抽象化
,然后使用上面提到的依赖项注入插入特定于平台的实现。这很容易做,而且非常有用

您缺少的一件事是UI测试。您可以将它们包含在单元测试类库中,或者创建另一个编码的UI测试类库,具体取决于您自己


无论如何,希望这能有所帮助。

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


请参见

感谢您提供的真正有用的信息和提示。很好的回答!!