我的WPF应用程序有一个App类,它从System.Windows.Application继承。测试应用程序类不会在测试完成后关闭应用程序
在这个类的内部,我有处理DispatcherUnhandledException的异常处理,因此任何未处理的异常都可能被捕获并呈现给用户。
为了验证这一点,我开始了我的测试与
//Arrange
app = new App();
,然后我继续测试设置的其余部分。
后来在我的测试运行此代码:
//Act
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new MyDlg(RaiseArgumentNullException));
这触发了App类要执行ApplicationStartup。
当我的下一个测试开始时,它也创建一个新的App类,并使用CurrentDispatcher.Invoke创建另一种类型的异常。 但是,第一个应用程序似乎正在运行。
如果我一个一个地运行我的两个测试,他们工作得很好。 但如果我顺序运行它们,第二个失败。
有没有人有任何想法如何在测试完成后正确关闭应用程序?
我试过以下方法关闭应用程序,但它不起作用。
static void CloseApp()
{
Application.Current.Shutdown();
}
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Send, new MyDlg(CloseApp));
app.Shutdown();
Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Send);
这是我的代码看起来像: 委托无效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;
}
//....
}
是什么让你说它“似乎在跑步”?我最初的想法是,你没有开始申请,因此没有任何东西可以抽调它的调度员。我在上面的代码的任何地方都看不到'Run()'的调用 - 是否遗漏了一些东西? – 2012-02-16 10:19:57
我之所以说它似乎正在运行,是因为当我运行第二次测试时,如果我按顺序运行它们而不是启动测试运行器(我使用resharper进行第一次测试),验证失败结果,然后启动测试跑步者进行第二次测试并验证它。 – 2012-02-16 11:42:46