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

本文关键字:显示 windows 窗体 单元测试 是否 | 更新日期: 2023-09-27 18:28:07

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

我正在尝试使用微软的内置单元测试编写一些单元测试,我开始认为我正在尝试做一些非常罕见的事情,因为我在互联网上根本找不到答案。

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

我只是希望能够做一些类似的事情:

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

其中DebugViewer是创建的Form I,并且SetPicture简单地更新PictureBox的图像。

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

我尝试了从一个主函数运行相同的代码,它运行正常。问题似乎是试图从单元测试中运行这个。

我还成功地使用opencv imShow函数显示了图像,即使是在单元测试中,所以我确信可以从单元测试中打开窗口,但我不知道为什么表单没有显示。

我意识到从单元测试中打开调试窗口没有多大意义,但由于我花了整整一个下午的时间试图解决这个问题,我想我至少应该满足我的好奇心。

非常感谢。

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

我认为你试图使用错误的工具来解决你的问题。。。仅仅为了调试目的而处理GUI可能会令人沮丧。。。

查看HypnoLog,这是我开发的一个开源工具,可以帮助我调试我使用C#和EmguCV编写的图像处理应用程序。

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

在您的情况下,您应该检查HypnoLogCSharp,并且已经有了一个简单的图像可视化工具。你的代码看起来像这样:

HL.log(debugImage, "image");

注意,debugImage应该在base64中进行图像编码,有关更多信息,请参阅ImageVisualizer

debugViewer窗体是以模式显示还是以非模式显示?我只是在玩单元测试,并试图显示我的报告预览表单。当我以模式显示表单时,它就起作用了。当我非模态地显示它时,什么也不显示。

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

(我确信这不是一个很好的答案,但我还没有简单评论的要点…)

编辑:我遇到过同样不显示的模态形式,我不知道为什么。我可以调试测试,当涉及到使用ShowDialog()显示表单的行时,执行会暂停,但不会显示表单。我甚至可以在调试窗口中检查表单,看看它的维度是否正确,Visible=true——仍然没有。所以,我被难住了。