1

我需要使用单元测试来测试我的库。

不幸的是,该库将 System.Windows.Application 实例作为参数。通常在现实世界的 WPF 应用程序中,这将是public partial class App : Application入口App.xaml应用程序类。

DispatcherUnhandledException这是库用来注册处理程序的事件所必需的。

有没有办法模拟或初始化Application.CurrentWPF 单元测试库中为 null 的 ?

谢谢你。

4

2 回答 2

6

用另一个实现接口的类包装它。当单元测试注入模拟实现时。

public interface IExceptionManager
{
    event DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
}

public class ExceptionManager : IExceptionManager
{
    Application _app;

    public ExceptionManager(Application app)
    {
        _app = app;
    }

    public event DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException
    {
        add
        {
            _app.DispatcherUnhandledException += value;
        }

        remove
        {
            _app.DispatcherUnhandledException -= value;
        }
    }
}

public class MockExceptionManager: IExceptionManager
{
    public event DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
}
于 2013-09-27T00:58:11.090 回答
0

嗯...通常这就是您的 App.xaml.cs 的样子(我添加了一个您可以访问的属性,但如果您不需要它,请忽略它):

    public partial class App : Application
    {
        static App()
        {
            DispatcherHelper.Initialize();
            ExampleProp = "whatever floats your boat here";

        }

        /// <summary>
        /// You can access this from any class by using "App.ExampleProp".
        /// </summary>
        public static string ExampleProp{ get; set; }
    }
}

现在,您可以使用“App.MyExampleProp”从任何地方访问它,但更重要的是,由于 App 扩展了 Application,它还具有 App.Current,这就是您所追求的,让您可以访问当前的应用程序。

于 2013-09-27T00:57:47.490 回答