Windows商店应用程序的Unit Test Library中,最流行的模拟框架是什么?

17
当我写单元测试时,我喜欢使用Rhino Mocks。因此,当我开始我的第一个Windows Store应用程序时,我自然首先从我的单元测试开始。当我尝试通过NuGet添加RhinoMocks时,我收到了以下错误信息:
“无法安装包'RhinoMocks 3.6.1'。您正在尝试将此包安装到目标为“.NETCore,Version=v4.5”的项目中,但该包不包含与该框架兼容的任何程序集引用。有关更多信息,请联系软件包作者。”
我在Moq上也遇到了同样的问题。
是否有适用于.NETCor,Version=v4.5的模拟框架?
5个回答

15

大多数模拟框架都基于Reflection.Emit。不幸的是,WinRT中没有Reflection.Emit。这意味着您无法进行动态代理(即运行时模拟)。只能在编译时引用预生成的模拟。我所知道的唯一框架是Moq的实验分支:https://github.com/mbrit/moqrt


2

1

以下是我的建议,请注意我还没有亲自测试过这些。这里是一篇讨论前两个选项的文章。

  1. TypeMock Isolator - 虽然价格昂贵,但看起来可以胜任工作
  2. Microsoft Fakes(从MSR的一个名为Moles的项目演变而来)
  3. 与其进行模拟(或进行依赖注入),您可以使用不同的技术。您可以使用参数化注入,只需传递需要测试的信息即可。这将大型对象转换为委托和基元,减轻了对模拟框架的需求。这里有更多相关信息,包括该技术的示例

2
Microsoft Fakes在WinRT中不可用。 - Mauricio Aviles
1
Isolator不支持winRT应用程序。 - Dror Helper

0

实际上,Philipp DolderFakeItEasy的贡献者之一,他提出了一种基于可移植类库的有趣且有效的方法。

本质上,他提出了以下解决方案:

  1. 将所有将进行TDD的生产代码放入PCL类库中,在其中选择您想要支持的任何目标框架
  2. 创建您的测试程序集作为常规类库
  3. 将FakeItEasy和您选择的测试框架(例如NUnit + FluentAssertions)的引用添加到*.Test程序集中
  4. 只将无法测试的UI内容放入Windows Store应用程序项目中
http://www.planetgeek.ch/2013/02/01/fakeiteasy-and-windows-store-apps-are-becoming-friends/

虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Bill the Lizard

-1

我知道原问题已经过时了,但仍有许多人在努力实现 Windows Store 应用程序中的模拟。

我最近开始使用 MoqaLate,它声明:适用于 Windows Phone 和 Windows Store 应用程序的模拟。 它实际上在构建解决方案后物理创建 MockingClasses。 因此,在构建后,您将拥有一个包含一些类的 Mock 实现的文件夹。

我认为这不是最佳选择。运行时模拟将是理想的选择,但同时它为我创建了模拟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接