visual-studio-2008 - 是否可以在 Visual Studio TestMethod 执行期间显示进度?

标签 visual-studio-2008 unit-testing

有没有办法可以在 Visual Studio 2008 中显示单个 TestMethod 的进度?

在一组单元测试中,我有一个运行时间非常长的单一测试方法 - 通常需要 30 到 60 分钟。我已经使用 [Timeout] 属性设置了超时,没有问题。但我希望能够获得测试进度的视觉指示。

我知道测试结果窗口提供了所有测试方法的可视化进度更新。我想要的是单个方法的视觉进度更新。在 WinForms 应用程序中,我会弹出一个 ProgressBar 控件。在控制台应用程序中,我会定位光标并显示状态消息。但这是一个单元测试。我可以写入 TestContext,但在测试完成之前无法查看该窗口。

编辑 :我知道有一种方法可以做到;这一切都只是软件,所以总有办法。但是什么是简单实用的方法呢?

一种方法是创建一个 TestMethodProgressMonitor.exe 应用程序,它从命名管道中读取数据,并根据通过管道传来的消息更新进度条。 TestMethod 可以shellExec TestMethodProgressMonitor.exe,然后写入命名管道。完成后,也许有一个众所周知的关闭命令,TestMethod 发送到 TestMethodProgressMonitor.exe 应用程序。

另一种选择是将 TestMethodProgressMonitor.exe 构建为 COM 服务器,并且 TestMethod 可以使用 COM (DCOM) 来更新应用程序内的托管进度条。

另一种选择是使用 user32.dll SendMessage() 方法将 WM_COPYDATA 消息发送到监视器应用程序。有时这样做是为了远程控制应用程序。

这些是一些可能性。在我开始构建其中一个之前,我想知道是否有更简单的方法。

最佳答案

我只是用一个带有进度条的窗口启动一个 GUI 线程。

这是一个可以帮助您入门的片段。它只是在另一个线程(而不是另一个进程)中弹出 MyProgressWindow。

[ClassInitialize()]
static public void MyClassInitialize(TestContext testContext)
{
    start_app_in_gui_thread();
}

static Thread t;

private static void start_app_in_gui_thread()
{
    t = new Thread(() => {
        var w = new MyProgressWindow();
        var app = new App();
        app.ShutdownMode = ShutdownMode.OnMainWindowClose;
        app.Run(w);
    });
    t.SetApartmentState(ApartmentState.STA);
    t.Start();
}

关于visual-studio-2008 - 是否可以在 Visual Studio TestMethod 执行期间显示进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002966/

相关文章:

visual-studio-2008 - Visual Studio 2008 在调试时播放错误声音

c++ - Visual Studio 无法在 Release模式下显示 'this' 的值(带有调试信息)

visual-studio-2008 - 使用访问器进行单元测试

javascript - 在测试我的 AngularJS Controller 时,如何在 $http.get promise 中模拟结果?

angularjs - 如何模拟提供商

c++ - 将库添加到 Visual Studio 2008 C++ 项目

c++ - 判断一个lib文件是否为2010 Build

javascript - 使用 Jest 导入 mp4 文件时出错

java - 测试 Spring Controller : Invoke service methods or mock results

java - Mockito - 方法内的测试方法