是否可以在单元测试中显示Windows窗体?

时间:2015-12-25 22:46:29

标签: c# winforms visual-studio unit-testing opencv

所以我正在使用opencv,Emgu和visual studio在C#中编写这个计算机视觉应用程序。

我正在尝试使用Microsoft的内置单元测试编写一些单元测试,我开始认为我正在尝试做一些非常罕见的事情,因为我无法在任何地方找到答案互联网。

该应用程序是一个控制台应用程序,因为它没有用户界面,但我想在编码时显示一些调试图像。我使用设计器创建了一个Form,其中有一些PictureBox

我只是希望能够做到这样的事情:

DebugViewer debugViewer = new DebugViewer();
debugViewer.SetPicture(debugImage);
debugViewer.Show();

DebugViewer是我创建的Form,而SetPicture只是更新PictureBox的图片。

问题是表单永远不会出现。即使设置了ShowInTaskbar属性,任务栏中也不会显示任何内容。

我尝试从主函数运行相同的代码并且它正常工作。问题似乎是尝试从单元测试中运行它。

我甚至在单元测试中也使用opencv imShow函数成功显示了图像,因此我确信可以从单元测试中打开窗口,但我不知道为什么表单不显示。

我意识到从单元测试打开调试窗口没有多大意义但是因为我已经失去了整整一个下午试图解决这个问题,我认为我至少应该满足我的好奇心。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您的debugViewer表单是以模态还是非模态显示的?我只是玩单元测试并尝试显示我的报告预览表单。当我以模态方式显示表单时,它可以工作。当我以非模态方式显示它时,不会显示任何内容。

我想,在单元测试结束时,以非模态方式显示表格,继续执行,将所有内容都超出范围。这意味着表单不会显示。或者,也许单元测试代码知道除非执行停止并且从不显示它,否则它不会显示任何内容?不确定。不过到目前为止,我已经能够在单元测试方法中弹出几种不同的形式。

(我相信这不是一个非常好的答案,但我还没有简单评论的要点......)

编辑:我遇到了也没有显示的模态形式,我无法弄清楚原因。我可以调试测试,当涉及使用ShowDialog()显示表单的行时,执行暂停但不显示任何表单。我甚至可以在调试窗口中检查表单,看看它的尺寸是否正确,Visible = true - 仍然没有。所以,我很难过。

答案 1 :(得分:0)

我认为您正尝试使用错误的工具来解决问题...仅出于调试目的而处理GUI可能会令人沮丧...

签出HypnoLog,这是我开发的一种开放源代码工具,可以帮助我调试使用C#和EmguCV编写的图像处理应用程序。

使用HypnoLog,您可以在浏览器中看到图像作为输出,并作为输出日志。

在您的情况下,您应该选中HypnoLog-CSharp,并且已经有一个简单的图像可视化工具。您的代码将如下所示:

HL.log(debugImage, "image");

请注意,debugImage应该以{{1​​}}进行图像编码,有关更多信息,请参见ImageVisualizer