关于winforms:在单元测试方法中显示Windows Forms

Displaying Windows Forms inside unit test methods

我刚刚在 Visual Studio .NET 中发现了单元测试项目,并且正在使用测试方法来设置我开发的全局代码示例。

一些全局方法涉及显示可重复使用的对话框,例如日期选择器和输入框。问题是,有时表单会显示,有时不会。

我以为和模态有关,因为我有一个可以模态或非模态显示的报告预览表单。当我以非模态方式显示时,它不会显示。当我以模态方式显示它时,它确实如此。

尝试我的输入框总是不行:

1
2
3
4
5
6
7
string input ="";
using (InputBox box = new InputBox(Title, Prompt, Default))
{
    DialogResult result = box.ShowDialog();
    input = box.txtInput.Text.Trim();
}
return input;

执行在 "box.ShowDialog()" 行停止,此时我可以检查 box 并查看它的尺寸、位置和可见性都已正确配置——但我看不到表单。我必须取消测试才能停止一切。

我很想使用单元测试项目来充当现有代码的游乐场和展示,但如果我不能显示某些表格,它似乎非常有限。我意识到这并不是单元测试的真正意义,但我希望我可以通过这种方式构建一个有趣的小沙箱,以帮助我的开发人员加快速度。


我终于基于一个单一的表单属性获得了一些一致的成功(以及缺乏成功):ShowInTaskbar。

当表单将该属性设置为 true 时,此类表单将不会从单元测试方法中显示。当该属性为 false 时,将显示所有表单。因此,据我所知,这里是确保表单可以从单元测试中显示的规则:

  • 该窗体应作为项目中的标准 Windows 窗体项创建。
  • 窗体应将其 ShowInTaskbar 属性设置为 FALSE。
  • 表单需要以模态方式显示(即使用 ShowDialog())。

这让我可以显示和测试我的所有实用程序表单,例如日期选择器和登录屏幕。


我也有同样的问题。对话框闪烁可见然后消失。它已经是 TopMost,我尝试了另一个技巧,即在调用 showdialog 之前将其设置为可见然后不可见,但没有任何效果。

然后我检查了另一个工作正常的对话框,它的 ControlBox = true。我试过了,它成功了!

这绝对适用于这个问题。