我正在从. NET Framework升级到. NET Core,但ShowDialog
出现问题。在. NET Framework和单元测试中,ShowDialog
点击命令并继续处理,但在. NET Core中,ShowDialog
启动一个新线程并停留在那里,直到手动选择一个按钮。这不能与单元测试一起工作。
这行代码:
tabControl.SelectTabItem(1); // FlaUI command
导致弹出窗口显示,但我需要选择一个网格项和一个确定按钮。我的问题是如何不拖延ShowDialog
操作?
这是对话框的图片:
单元测试位于自己的项目中,并调用另一个项目中的对话框,如下所示:
tableSelection = new DatabaseTableSelection(filePath, contr);
tableSelection.Topmost = true;
tableSelection.ShowDialog();
if (tableSelection.selectedTable == null)
{
return false;
}
看起来我需要模拟这个,但是我从来没有用过模拟。有什么想法吗?
1条答案
按热度按时间w8biq8rn1#
您不应该在任何正在进行单元测试的方法中使用
ShowDialog
,也不应该在任何其他类型的对话框或UI中使用ShowDialog
。一个可能的解决方法是注入一个接口,类似于
IMessageDialog
,可以在单元测试中模拟。例如:
注意,如果你能把所有的功能封装到一个方法中,模拟会更容易,否则你可能需要两个接口,一个用于创建对话框,另一个用于对话框本身。
但是UI越复杂,模拟就越复杂,这使得单元测试编写起来越慢,价值也就越低。
所以我倾向于使用的方法是确保ShowDialog或任何其他类型的UI被限制在特定的UI类或viewModel中,并尝试将任何复杂的逻辑从这些类中移走。这样就可以用单元测试来测试复杂的逻辑,并进行手动测试来检查UI是否按预期工作。有一些工具可以自动进行UI测试,但我还没有看到一个我认为值得努力的。