【问题标题】:how to resolve error while writing nunit test case for Application.Current.FindResource() in WPF在 WPF 中为 Application.Current.FindResource() 编写 nunit 测试用例时如何解决错误
【发布时间】:2014-09-16 07:04:21
【问题描述】:

我正在为一个类编写测试用例,具有 Application.Current.FindResource() 方法。但是在通过上面的代码时,我得到了像“ObjectNotInitialized”这样的错误。 以下是代码:-`public void ContactListViewModel()

{
    var app = Application.Current;
    var default_Flag = (DrawingImage) app.FindResource("Unknown_Flag");
}

以下是错误,我得到了:

{"对象引用未设置为对象的实例。"}

请告诉我如何为这个方法编写测试用例

【问题讨论】:

  • 使用 TryFindResource,会返回异常 null。
  • 我们为 UI 编写单元测试。如果您坚持测试您的用户界面,那么您应该改用UI Automation

标签: c# wpf nunit rhino-mocks


【解决方案1】:

我会将 Sheridan 的评论作为回答的细微差别: 在 WPF 中,您通过测试 ViewModel 来测试 UI(这是 MVVM 对 WPF 项目如此重要的原因之一)。如果您想要更多,可以使用UI automation

通常在这里,您无法测试您的类,因为它与应用程序耦合。 (即:您因为调用 Application.Current 而被卡住了)

现在想象一下,如果不是直接调用,而是(通过参数)将当前应用程序作为接口注入。然后这个接口可以是模拟的,因此你的类将变得可测试(你的依赖将被反转)。

总之,即使不进行重构,您实际上也可以使用MS fakes 进行测试。但是我将它作为信息提供给您,我强烈建议您不要使用它,尤其是如果您是单元测试的初学者。当您想测试遗留代码时,它更有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多