2014-05-23 116 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();