为了将SpecFlow测试添加到一系列WPF应用程序中,我目前正在尝试将SpecFlow与VS.NET 2012中非常简单的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#经验都是Mono)。我正在尝试做这个项目,因为我现在有时间和一位同事问我。
答案 0 :(得分: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();