一段时间以来,我一直在使用 NUnit 和 Moq 以及 Silverlight 代码编写单元测试。我一直遇到的一个问题与 DependencyObjects 有关。
如果有任何东西是从 DependencyObject 派生的,那么我无法在测试中实例化它。例如,MouseEventArgs 派生自 DependencyObject。如果我有采用这些参数的代码,则由于多种原因我无法创建这些参数......其中之一是它是一个 DependencyObject。
据我了解,DependencyObject 的基本构造函数正在尝试处理一些除非整个 Silverlight 系统启动并运行否则不存在的静态数据。从 DependencyObject 派生的类的任何构造都会引发异常。真糟糕。
我不使用Silverlight 单元测试框架 http://code.msdn.microsoft.com/silverlightut/,因为它实际上不是单元测试并且需要 UI。我运行需要真正的无头单元测试。
不管怎样,我想出的最好的办法就是包装这些对象并给它们提供像这样的接口ITimelineMarker
我给他们扩展方法来做到这一点:timelineMarker.ToInterface()
。这很有效,我可以模拟它们......但我想知道:
有没有人想出更好的方法来处理 Silverlight 单元测试中的 DepenceObjects?
为什么应用程序逻辑直接与 SilverLight 事件和对象绑定?尝试通过应用程序的 UI 测试其逻辑的注意事项是众所周知的反模式,并且已经让位于以更有效的方式解决此问题的模式。
您的 UI 实际上应该只关心 UI 事件并将任何处理传递到另一层,然后在 UI 中测试的唯一事情就是图形响应(例如,当您单击按钮时,面板会从侧面滑入),测试此类交互的唯一好方法就是实际进行点击。
也许对您的问题更合适的答案是您需要重构代码以使用 MVC、MVP 或 MVVM 等模式,以便可以独立于 UI 层测试应用程序逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)