【问题标题】:Using SpecFlow to test a WPF application使用 SpecFlow 测试 WPF 应用程序
【发布时间】:2014-05-23 23:36:17
【问题描述】:

为了将 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)。

我应该补充一点,我在 VS.NET 方面的经验超过 0 次,但几乎没有(可能 2 年内不到 100 小时,我获得的大多数 C# 经验都是 Mono)。我正在尝试做这个项目,因为我现在有一些时间,一位同事问我。

【问题讨论】:

    标签: c# wpf specflow


    【解决方案1】:

    显然,它使用所谓的“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();
    

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2013-04-25
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多