【问题标题】:Is it possible to display a windows Form from within unit tests?是否可以在单元测试中显示 Windows 表单?
【发布时间】:2016-03-31 17:47:14
【问题描述】:

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

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

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

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

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

其中DebugViewer 是我创建的FormSetPicture 只是更新PictureBox 的图像。

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

我尝试了从 main 函数运行相同的代码,它工作正常。问题似乎在于尝试从单元测试中运行它。

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

我意识到从单元测试中打开调试窗口没有多大意义,但由于我已经浪费了整个下午来尝试解决这个问题,我认为我至少应该满足我的好奇心。

非常感谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    HL.log(debugImage, "image");
    

    注意,debugImage 应该是在base64 中编码的图像,有关详细信息,请参阅ImageVisualizer

    【讨论】:

      【解决方案2】:

      您的 debugViewer 表单是模态显示还是非模态显示?我只是在玩单元测试并尝试显示我拥有的报告预览表单。当我以模态方式显示表单时,它可以工作。当我以非模态方式显示它时,什么也没有显示。

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

      (我敢肯定这不是一个很好的答案,但我还没有要简单评论的要点......)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 2011-06-12
        • 2015-05-04
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多