2014-05-23 113 views
0

爲了SpecFlow測試增加了一系列的WPF應用程序我目前正試圖以SpecFlow一個非常簡單的WPF測試應用程序在VS.NET 2012使用SpecFlow測試WPF應用程序

我結合遵循steps outlined in SpecFlow's getting-started,區別在於我有一個包含兩個項目(WPF與SpecFlow一起)的解決方案。

我有一個單一的場景和步驟的步驟定義。 不幸的是,在測試資源管理器中沒有列出測試並選擇「運行SpecFlow方案」(按照getting started中的步驟6)沒有任何反應。發現在VS.NET 2012上需要NUnit測試適配器後,我可以運行測試。不幸的是,我現在在難倒打開窗口下的測試:

namespace SpecOverflow 
{ 
    [Binding] 
    public class StepDefinitions 
    { 
     static private BackgroundWorker _bw = new BackgroundWorker(); 
     private MainWindow win; 

     [BeforeScenario] 
     public void CreateWindow() 
     { 
      // Need to run this in a separate thread because we get "The calling thread must be STA, because many UI components require this." errors otherwise 
      _bw.DoWork += (_,__) => { win = new MainWindow(); }; 
      _bw.RunWorkerAsync(); 
      while (_bw.IsBusy) 
       ; 
     } 

     ... 
    } 
} 

然而,這似乎並沒有創建一個窗口(我得到了使用它的第一生成步驟一個NullReferenceException)。我應該補充說,我已經有了超過0 VS.NET的經驗,但只有幾乎(可能 在兩年內少於100小時,大多數C#經驗,我已經與莫諾)。我試圖做這個項目,因爲我現在有一些時間,一位同事問我。

回答

0

在它自己的線程具有所謂的「STA」「的ApartmentState」顯然,創建窗口做的:

var winThread = new Thread(() => 
{ 
    win = new MainWindow(); 
    win.Closed += (sender, e) => win.Dispatcher.InvokeShutdown(); 

    System.Windows.Threading.Dispatcher.Run(); 
}); 

winThread.SetApartmentState(ApartmentState.STA); 
winThread.Start();