我需要在单元测试中打开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的新手,如果有任何建议或指导,这将是值得注意的。
感谢。
答案 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();
}
只有一台显示器可以实现相同的功能,但这种方式更具可读性。