我有一个名为 OptionsWindow 的类,它继承自 Window ,用于从窗口中的选项中进行选择。还有一个处理这些对话框的对话框类。在我的测试中,我试图模拟从对话框中选择的选项。
[TestMethod]
public async Task Test()
{
dialog.Setup(e => e.ShowDialog(It.IsAny<Window>(), It.IsAny<IntPtr>()))
.Returns(true)
.Callback<Window, IntPtr>((w, ip) => {
if (w.DataContext != null && w.DataContext is OptionsViewModel ovm)
ovm.Result = -1;
});
await tester.ShowWindow();
//assert....
}
然后在正在测试的课程中,我有这些方法。
public async Task ShowWindow()
{
var res = ShowDialog();
//do other stuff...
}
private int ShowDialog()
{
OptionsViewModel vm = //.....
dialog.ShowDialog(new OptionsWindow(vm));
return vm.Result;
}
但是,当它尝试设置 OptionsViewModel 的结果时,我收到错误“调用线程必须是 STA,因为许多 UI 组件需要这个”。
在手动测试期间,一切正常,没有线程问题,所以我不知道为什么我在这里得到这些......任何帮助都很棒。谢谢
(我使用 Microsoft.VisualStudio.TestTools.UnitTesting 顺便说一句)