C# 单元测试 打开 Window.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 的新手,如果在此处提供任何建议或指导,那将是显而易见的。

谢谢。

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

[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();
}

仅使用一台显示器可以实现相同的目标,但以这种方式更具可读性。

最新更新