我在单元测试项目中创建了一个测试,我希望在其中使用ShowDialog()
函数弹出表单:
[TestMethod]
public void TestDialog()
{
// This class inherits from Form
TestForm serviceTestForm = new TestForm("My test form");
serviceTestForm.ShowDialog();
return;
}
我希望此测试达到ShowDialog()
,并且无限期地运行,直到我关闭窗口。但是,当我“使用调试”运行此测试时,测试到达ShowDialog()
,并且不显示任何表单。奇怪的是,如果我运行“没有调试”,这个完全相同的测试可以。
我需要能够“通过调试”运行测试并显示窗口。
其他说明:
Show()
是不可取的,因为它不会等待窗口关闭继续。 (除此之外......它不起作用。)ShowDialog()
战略以前肯定有效。 (是的,我直接复制了工作代码。)答案 0 :(得分:31)
尽管我试图避免构建使用System.Windows.Forms
的单元测试,但我遇到了一个奇怪的情况,我也需要这个,并通过处理Load
事件并明确设置{{ 1}}。当从测试方法调用ShowDialog时,这会强制表单可见。
Visible = true
或者,只需从测试方法中观察表单实例,然后在那里执行相同的操作。至少这可以进一步减轻这个问题,因为它可以防止黑客攻击你的表单代码。
private void form1_Load(object sender, EventArgs e)
{
// To support calling ShowDialog from test method...
this.Visible = true;
...
}
答案 1 :(得分:0)
就我而言,使用VS2017,将属性ShowInTaskbar
设置为false
可以解决问题。
这是用于显示对话框的完整代码:
form.TopMost = true;
form.StartPosition = FormStartPosition.CenterScreen;
form.ShowInTaskbar = false;
form.ShowDialog();
P.S。找到这个之后,我在Displaying Windows Forms inside unit test methods
中看到了相同的解决方案