我需要在单元测试中打开我的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();
}
仅使用一台显示器可以实现相同的目标,但以这种方式更具可读性。