2013-07-22 46 views
13

我创建了一个单元测试项目中的测试,其中我想用它ShowDialog()功能弹出一个形式不显示窗口预计此测试将达到ShowDialog(),然后“无限期”运行,直到关闭窗口。但是,当我运行这个测试时,“调试”,测试达到ShowDialog(),并且没有窗体出现。奇怪的是,如果我运行“没有调试”,相同的确切测试工作Form.ShowDialog()调试启用

我需要能够运行测试“调试”,并有窗口显示。

其他说明:

  • Show()是不可取的,因为它没有等待窗口关闭继续。 (除此之外...它不起作用)
  • 这个相同的代码以前在使用.NET 3.5的另一个项目上工作过。这只是说ShowDialog()策略以前绝对有效。 (是的,我直接复制该工作代码。)
  • 我的问题类似于this one,但是,我的表单不是另一个对话框的子节点,并且不在父UI线程中。

回答

27

虽然我尽量避免使用System.Windows.Forms,我遇到了,我需要这个问题,以及并通过操纵Load事件,并明确设置Visible = true解决了它一个奇怪的情况下,建筑物单元测试。当从测试方法调用ShowDialog时,这强制该窗体可见。

private void form1_Load(object sender, EventArgs e) 
{ 
    // To support calling ShowDialog from test method... 
    this.Visible = true; 
    ... 
} 

另外,只需从您的测试方法中观察表单实例,然后在那里执行相同的操作。至少这可以进一步缓解问题,因为它可以避免您的表单代码被破解。

var frm = new Form1(); 
frm.Load += (sender, e) => (sender as Form1).Visible = true; 
frm.ShowDialog(); 
+0

我有一个罕见的情况需要这个和你的答案帮助。但是我意识到我可以在测试中创建表单对象,然后在测试中设置myform.visible = true。完美的作品:) – RosieC

+2

David提供的代码在VS2013上为我工作得很好。但是在VS2015上,它停止显示表格。非常感谢,lambda帮助。 –

+0

这为VS2017修复了这个问题,在VS崩溃之后这成为了一个问题 – Jens