首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从单元测试调用时,Application.Current为空

从单元测试调用时,Application.Current为空
EN

Stack Overflow用户
提问于 2013-02-13 01:00:44
回答 3查看 20.7K关注 0票数 25

我有一个正尝试从单元测试中调用的方法。在现实生活中,此方法将从后台线程运行。它使用一些代码来启动对UI线程的调用更新(使用Application.Current.Dispatcher.BeginInvoke ...)。

但是,当从单元测试中调用Application.Current时,它是null

我真的不知道在所有需要修复的东西周围放一个if (Application.Current !=null)是什么。

有没有别的办法来解决这个问题呢?

_statusUpdates是一个ObservableCollection

下面是我要测试的方法中的代码部分(公平地说,它更像是一个集成测试,而不是一个单元测试)。

代码语言:javascript
运行
复制
Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (EventHandler)delegate
{
    _statusUpdates.Add(new StatusUpdate
    {
        DateTime = DateTime.Now,
        Message = "Checking For Messages"
    });
}, null, null);
EN

回答 3

Stack Overflow用户

发布于 2016-10-04 06:07:52

下面的代码片段适用于我:

代码语言:javascript
运行
复制
if (System.Windows.Application.Current == null) 
  { new System.Windows.Application { ShutdownMode = ShutdownMode.OnExplicitShutdown }; }

我在使用嵌入在WinForms应用程序中的WPF控件时遇到了应用程序为空的问题,并且在StackOverflow上的另一个问题(对不起,找不到源代码)中建议使用代码片段来解决这个问题。它在单元测试中解决了同样的问题(我不认为在这种情况下需要显式设置ShutdownMode属性)。

票数 24
EN

Stack Overflow用户

发布于 2013-02-13 01:17:02

在单元测试运行器中不会有Application对象。这些通常是基于“控制台”的应用程序,它们只是运行和执行非UI代码(“单元”)。

我建议您不要使用单元测试框架来测试特定于UI的信息,我建议使用自动化的UI测试框架来实现这一点。

票数 0
EN

Stack Overflow用户

发布于 2013-02-13 01:12:52

所以这里的问题是必须在某个地方创建Application对象。因此,您需要找出System.Windows.Application (或某个子类)被实例化的位置。

如果项目是从模板构建的,那么您可能会在App.xaml文件中找到这个类。你只需要确保它以某种方式被实例化。否则,在整个项目中搜索Application类,然后必须手动实例化它。应该能修好它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14837784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档