C#单元测试打开Window.xaml

时间:2015-04-28 12:07:32

标签: c# wpf unit-testing xaml

我需要在单元测试中打开Window.xaml。我尝试了一个简单的代码如下:

 [Test]
 public void Test_window()
 {
      var mw = new MainWindow();
      mw.Show();
 }

上述代码以错误结束。

  

调用线程必须是STA,因为许多UI组件都需要   此

之后,我尝试了以下代码:

     [Test]
     public void Test_window()
     {
        Thread th = new Thread(new ThreadStart(delegate
        {
            var mw = new MainWindow();
            mw.Show();
        }));

        th.ApartmentState = ApartmentState.STA;
        th.Start();

     }

在这种情况下,测试成功通过,但没有显示窗口。由于我是WPF的新手,如果有任何建议或指导,这将是值得注意的。

感谢。

1 个答案:

答案 0 :(得分:2)

我认为它显示了,但速度非常快,因为你不会等待窗口。你可以这样做:

[Test]
public void Test_window()
{
    var showMonitor = new ManualResetEventSlim(false);
    var closeMonitor = new ManualResetEventSlim(false);

    Thread th = new Thread(new ThreadStart(delegate
    {
        var mw = new MainWindow();
        mw.Show();

        showMonitor.Set();
        closeMonitor.WaitOne();
    }));

    th.ApartmentState = ApartmentState.STA;
    th.Start();

    showMonitor.WaitOne();
    Task.Delay(1000).Wait();
    //anything you need to test
    closeMonitor.Set();
}

只有一台显示器可以实现相同的功能,但这种方式更具可读性。