1

我正在我的 Prism 复合应用程序中实施单元测试,并尝试实施 Microsoft Pex ( http://research.microsoft.com/en-us/projects/pex/ ) 以加快这项任务。但是我遇到了很多与 Prism 相关的麻烦。尽管使用 Moles 来存根 Prism 实现,但我在执行此操作时遇到了很多错误和问题。

有人已经成功地将 Pex 与 Prism 应用程序一起使用了吗?

提前感谢您的回答

4

1 回答 1

1

经过数小时的努力,我终于设法在我想要的项目中实施测试。以下是关于我使用 Prism 复合应用程序的 Pex 和 Moles 体验的一些详细信息(我也使用 CodeContracts,我建议使用它,但这在这里没有发生)。

  • Pex 和 Moles 主要有两点敏感:.Net 框架类和接口,以及 Prism 类和接口。由于它们的低级(系统)和依赖注入(Prism),它们不容易检测。
  • 我做的第一件事是在我的项目上第一次运行 Pex 以使错误出现。在那里,我找到了一个我要求 Pex 生成的成功测试。它会自动使用 Pex 引用创建测试项目。
  • 在那里,我确定了哪些类和接口必须被存根:它主要涉及 Prism 接口,如 IEventAggregator 和 IRegionManager。这些接口有实现并且可以被 Moles 存根。只需右键单击 Prism 参考(在项目参考中),然后单击“为Prism添加痣”。自动生成包含所有 Prism 类的存根的程序集,由 Pex 在下一次探索时自动使用。小心使用这个工具。我的第一反应是“痣”一切(棱镜,系统,依赖......)。这是测试项目的死亡。我没有找到如何抑制痣集合体。所以当它完成时,它就完成了!
  • 我建议部分地“痣”依赖关系,并在做之前三思而后行。有时,Pex 无法创建对象,因为底层参数错误实例化,导致对象创建失败(Pex 报告没有显示缺乏实现和低级别错误之间的区别。它总是说:“ MyClass无法创建对象”并建议创建工厂)
  • 我为那些不能被 Moles 存根的类创建了工厂。特别是,它不适用于使用事件聚合器(继承自 CompositionPresentationEvent)的事件。
  • 要有耐心并解决。我发现 Pex 仍然是实验性的并且“没有回头路”。解决反叛错误消息的最佳方法是删除测试项目并重新开始 pex 探索。

如果有人可以帮助我回答并提供更多详细信息和更正,那将非常受欢迎!

于 2011-02-08T01:18:09.130 回答