我需要使用单元测试来测试我的库。
不幸的是,该库将 System.Windows.Application 实例作为参数。通常在现实世界的 WPF 应用程序中,这将是public partial class App : Application
入口App.xaml
应用程序类。
DispatcherUnhandledException
这是库用来注册处理程序的事件所必需的。
有没有办法模拟或初始化Application.Current
WPF 单元测试库中为 null 的 ?
谢谢你。
我需要使用单元测试来测试我的库。
不幸的是,该库将 System.Windows.Application 实例作为参数。通常在现实世界的 WPF 应用程序中,这将是public partial class App : Application
入口App.xaml
应用程序类。
DispatcherUnhandledException
这是库用来注册处理程序的事件所必需的。
有没有办法模拟或初始化Application.Current
WPF 单元测试库中为 null 的 ?
谢谢你。
用另一个实现接口的类包装它。当单元测试注入模拟实现时。
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;
}
嗯...通常这就是您的 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,这就是您所追求的,让您可以访问当前的应用程序。