我的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