gpt4 book ai didi

silverlight - 在 Silverlight 单元测试中处理 DependencyObjects

转载 作者:行者123 更新时间:2023-12-04 02:30:59 25 4
gpt4 key购买 nike

一段时间以来,我一直在使用 NUnit 和 Moq 以及我的 Silverlight 代码编写单元测试。我一直遇到的一个问题与 DependencyObjects 有关。

如果有任何东西是从 DependencyObject 派生的,那么我就不能在我的测试中实例化它。例如,MouseEventArgs 派生自 DependencyObject。如果我有采用这些 args 的代码,我无法创建 args 有几个原因......其中之一是它是一个 DependencyObject。

据我所知,DependencyObject 的基本构造函数正在尝试处理一些除非整个 Silverlight 系统启动并运行否则不存在的静态信息。派生自 DependencyObject 的类的任何构造都会引发异常。真可惜。

我不使用 Silverlight Unit Test Framework ,因为它确实不是单元测试并且需要 UI。我运行需要真正的、 headless 的单元测试。

无论如何,我想出的最好办法是包装这些对象并为它们提供接口(interface),如 ITimelineMarker,我为它们提供扩展方法来实现它:timelineMarker.ToInterface()。这很好用,我可以模拟它们……但我想知道:

有人想出更好的方法来处理 Silverlight 单元测试中的 DepencencyObjects 吗?

最佳答案

为什么将应用程序逻辑直接绑定(bind)到 SilverLight 事件和对象?尝试通过应用程序的 UI 测试应用程序逻辑的警告是众所周知的反模式,并且已经让位于以更有效的方式解决此问题的模式。

您的 UI 真的应该只关心 UI 事件并将任何处理传递给另一层,然后在您的 UI 中唯一要测试的就是图形响应(例如当您单击一个按钮时面板是否从侧),测试此类交互的唯一好方法是实际进行点击。

也许对您的问题更合适的答案是您需要重构代码以使用 MVC、MVP 或 MVVM 等模式,以便您可以独立于 UI 层测试应用程序逻辑。

关于silverlight - 在 Silverlight 单元测试中处理 DependencyObjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/761542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com