我们正在使用 NUnit 来测试 WPF 控件。文本夹具基本上会打开一个测试窗口,其中包含要在新线程上测试的控件。然后使用 Microsoft UI 自动化 (UIA) 与控件进行交互。
新线程显示窗口并启动调度程序。事情按预期工作。
我们遇到的问题是这个控件可以启动一个对话框。对话框启动后,我们需要与之交互并关闭它。我无法获得对此对话框的引用来完成此任务。
一种不起作用的解决方案是使用 Application.Current.Windows 来获取所有窗口,然后遍历它们直到找到对话框。这不起作用,因为在单元测试期间 Application.Current = null。现在,如果我们只关心这个测试,我们就可以实例化一个应用程序。然而,这会干扰其他测试,因为当我们的应用程序变量超出范围时(在测试结束时),应用程序将自动进入关闭模式。结果,其他测试将失败(最明显的是因为 InitializeComponent 通常调用 System.Windows.Application.LoadComponent 在关机模式下无法调用)。
我想我们需要的是 Application.Current.Windows 的替代品。