首页 > 解决方案 > 尝试在 TestCase 中使用 Application.Current,但无法从 System.Windows 导入应用程序

问题描述

我尝试对一个 Gui 应用程序代码进行单元测试,该代码使用 Application.Current.Dispatcher.Invoke()并希望在类似的线程Using the WPF Dispatcher in unit tests 中使用@informatorius 提供的解决方案。代码如下所示。

我遇到的问题Application是没有解决,即使我添加using System.Windows. 是否有一些特殊的机制可以 Application从定义测试用例的类库中解决?我已经安装了MSTest.TestFrameworkMSTest.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
    }
}

标签: c#unit-testing

解决方案


答案为我指明了正确的方向: using System.Windows还不够,我还需要添加对PresentationFramework项目的引用。不太了解这背后的汽车魔法。


推荐阅读