C# 单元测试打开 Window.xaml

标签 c# wpf unit-testing xaml

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

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

以上代码以错误结束。

The calling thread must be STA, because many UI components require this.

之后,我尝试了下面的代码:

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

只用一台显示器也可以实现同样的效果,但这样可读性更好。

关于C# 单元测试打开 Window.xaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29919055/

相关文章:

asp.net - 可以在 Web 应用程序中使用 WPF 程序集吗?

WPF : Is it impossible to UI load in background thread?

c# - 为什么将值提取到 'var' 变量会改变行为?

Flutter:比较预期和实际的 block 测试问题

c# - 单击WPF Caliburn.Micro中的按钮时无法在DataGrid中全选

c# - 将 DataGridView 导出到 Excel,并应用过滤器 C#

c# - 如何更新 JSON 字符串中的属性值?

c# - 非短路 bool 运算符和 C# 7 模式匹配

c# - WPF 表单与后台线程锁定

unit-testing - 在 TypeScript 中为抽象类创建扩展匿名类