c# - 尝试在 TestCase 中使用 Application.Current,但无法从 System.Windows 导入应用程序
问题描述
我尝试对一个 Gui 应用程序代码进行单元测试,该代码使用
Application.Current.Dispatcher.Invoke()
并希望在类似的线程Using the WPF Dispatcher in unit tests 中使用@informatorius 提供的解决方案。代码如下所示。
我遇到的问题Application
是没有解决,即使我添加using System.Windows
. 是否有一些特殊的机制可以
Application
从定义测试用例的类库中解决?我已经安装了MSTest.TestFramework
和MSTest.TestAdapter
包。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class ApplicationInitializer
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
var waitForApplicationRun = new TaskCompletionSource<bool>();
Task.Run(() =>
{
var application = new Application();
application.Startup += (s, e) => { waitForApplicationRun.SetResult(true); };
application.Run();
});
waitForApplicationRun.Task.Wait();
}
[AssemblyCleanup]
public static void AssemblyCleanup()
{
Application.Current.Dispatcher.Invoke(Application.Current.Shutdown);
}
}
[TestClass]
public class MyTestClass
{
[TestMethod]
public void MyTestMethod()
{
// implementation can access Application.Current.Dispatcher
}
}
解决方案
答案为我指明了正确的方向:
using System.Windows
还不够,我还需要添加对PresentationFramework
项目的引用。不太了解这背后的汽车魔法。
推荐阅读
- c++ - 第三方库怎么能做标准库做不到的事情呢?
- npm - 通过npm在本地注册命令cli
- entity-framework-core - EF Core 5:必须是可简化节点
- azure - Azure DevOps Starter Wizard 中缺少资源组字段
- php - php 7.4 mongodb dll 文件(1.9.0) 与 windows 10 系统上的 php 8 不兼容
- angular11 - 使用 HttpClient 的 Angular 11 中的 Cors 问题
- javascript - 如何在 react 中使用 formik 创建动态下拉列表?
- php - 创建排行榜
- vue.js - 上下文和凭据的好处
- node.js - 生产环境中的 MongoDB 备份和恢复