使用Microsoft Pex和Prism复合应用程序

时间:2011-02-07 09:11:44

标签: .net wpf prism pex

我正在我的Prism组合应用程序中实现单元测试,并尝试实现Microsoft Pex(http://research.microsoft.com/en-us/projects/pex/)来加速这项任务。 但是我遇到了很多与棱镜有关的麻烦。尽管使用Moles来保存Prism实现,但我遇到了很多错误和问题。

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

提前感谢您的回答

1 个答案:

答案 0 :(得分:1)

经过几个小时的奋斗,我终于设法在我想要的项目中实施测试。 以下是我使用Prism复合应用程序的Pex和Moles(我也使用CodeContracts,我也建议使用CodeContracts,但这里没有发生)的一些细节。

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

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