我的WPF应用程序有一个App类,它继承自System.Windows.Application。
在这个类中,我有处理DispatcherUnhandledException的异常处理,因此可以捕获任何未处理的异常并将其呈现给用户。
为了测试这个,我用
开始测试//Arrange
app = new App();
然后我继续进行其余的测试设置。
稍后在我的测试中我运行了这段代码:
//Act
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new MyDlg(RaiseArgumentNullException));
这会触发ApplicationStartup在App类中执行。
当我的下一个测试开始时,它还会创建一个新的App类,并使用CurrentDispatcher.Invoke创建另一种类型的异常。 但是,第一个应用程序似乎正在运行。
如果我一个接一个地运行我的两个测试,它们的工作正常。 但如果按顺序运行它们,第二个就会失败。
有没有人知道在测试完成后如何正确关闭应用程序?
我已尝试以下方法关闭应用程序,但它不起作用。
static void CloseApp()
{
Application.Current.Shutdown();
}
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Send, new MyDlg(CloseApp));
app.Shutdown();
Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Send);
这就是我的代码的样子: 委托void MyDlg();
static void RaiseArgumentNullException()
{
throw new ArgumentNullException();
}
[Test]
public void MyTest()
{
//Arrange
app = new App();
//...
//Act
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new MyDlg(RaiseArgumentNullException));
//Assert....
//Tear Down
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Send, new MyDlg(CloseApp));
app.Shutdown();
Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Send);
}
这是我的App类:
public partial class App : Application
{
public App()
{
Startup += ApplicationStartup;
DispatcherUnhandledException += AppDispatcherUnhandledException;
Bootstrapper.InitializeIoc();
}
private void ApplicationStartup(object sender, StartupEventArgs e)
{
//Do startup stuff
}
void AppDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
HandleException(e.Exception);
e.Handled = true;
}
//....
}
答案 0 :(得分:0)
Application
类不允许每Application
个AppDomain
(或任何子类)创建多个实例。这与Application
是否仍在运行无关。来自MSDN:
Application实现单例模式以提供共享访问 到它的窗口,属性和资源范围服务。所以, 每个只能创建一个Application类的实例 应用程序域。
要解决此问题,您可以在每个测试中创建AppDomain
。