我需要在单元测试中打开我的 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/