Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 在VisualStudioTestMethod的执行过程中是否可以显示进度?_Visual Studio 2008_Unit Testing - Fatal编程技术网

Visual studio 2008 在VisualStudioTestMethod的执行过程中是否可以显示进度?

Visual studio 2008 在VisualStudioTestMethod的执行过程中是否可以显示进度?,visual-studio-2008,unit-testing,Visual Studio 2008,Unit Testing,在VisualStudio2008中,有没有一种方法可以显示单个测试方法的进度 在一组单元测试中,我有一个运行时间非常非常长的测试方法——通常需要30到60分钟。我已经使用[Timeout]属性设置了超时,没有问题。但我希望能够得到测试进展的视觉指示 我知道测试结果窗口提供了所有测试方法的可视化进度更新。我想要的是单个方法的可视化进度更新。在WinForms应用程序中,我会弹出一个ProgressBar控件。在控制台应用程序中,我会定位光标并显示状态消息。但这是一个单元测试。我可以写入TestC

在VisualStudio2008中,有没有一种方法可以显示单个测试方法的进度

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

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


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

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

另一个选项是将TestMethodProgressMonitor.exe构建为COM服务器,TestMethod可以使用COM(DCOM)更新应用程序中托管的进度条

另一个选项是使用user32.dll SendMessage()方法向monitor应用程序发送WM_COPYDATA消息。这有时用于远程控制应用程序


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

我只是用一个带有progressbar的窗口启动一个GUI线程

这里有一个片段让你开始。它只是在另一个线程(而不是另一个进程)中弹出MyProgressWindow


对于长时间运行的测试,我使用跟踪API来附加跟踪侦听器(DbgView或一些定制的东西)

这使得不需要跳出任何障碍就可以非常简单地看到发生了什么


这不会给你一个进度条体验(尽管你可以很容易地编写一个进度条)。

不确定这是最简单的方法,但我就是这么做的。我创建了一个类,它负责WM_COPYDATA的发送和接收。这是一个收发机。这允许一个Windows应用程序在同一台机器上与另一个Windows应用程序通信,延迟相当低。我把它打包成一个组件

然后我构建了一个winforms应用程序(UnitTestProgressMonitor.exe),它创建了一个收发器,并根据收到的消息更新其UI。这些消息只是字符串。他们就是这样做的:

  • 条形图3-用户界面创建并显示3个进度条
  • pb 0 max 100-将进度条的最大值#0设置为100
  • pb 0值28-将进度条的值#0设置为28
  • 停止-退出
然后,在[TestMethod]中,我shellexec UnitTestProgressMonitor.exe,然后创建一个收发器并发送应用程序消息

测试代码将“条3”发送到进度监视器应用程序,告诉它创建3条进度条。第一个跟踪测试中的7个步骤。第二个进度条测量zip文件的进度;文件中的每个条目都是沿条形图的一个步骤。第三条是单个条目的进度。其中一些是数千GB的文件,因此压缩它们可能需要一段时间。在测试执行过程中,测试会在适当的时间发送“pb 0步骤”或其他信息。这些消息会导致进度条更新。在测试结束时,测试代码向monitor应用程序发送“停止”。作为回应,进度监视器应用程序消失了。测试结束


我满足了同样的要求,但任何新文件或可执行文件对我来说都太过分了:我在编写单元测试,而不是应用程序。以下代码将进度写入调试输出窗口:

    [TestMethod]
    public void ProgressTest()
    {
        int nLastWritten = -1, nTotal = 10000;

        for (int i = 0; i < nTotal; i++)
        {
            int nProgress = 100 * i / nTotal;
            if (nProgress > nLastWritten)
            {
                System.Diagnostics.Trace.WriteLine("Progress: " + nProgress + "%");
                nLastWritten = nProgress;
            }
        }
    }
[TestMethod]
公开考试()
{
int NLASTWRITED=-1,nTotal=10000;
对于(inti=0;inLastWrite)
{
System.Diagnostics.Trace.WriteLine(“进度:+nProgress+“%”);
NLASTWRITED=N进度;
}
}
}

一个需要那么长时间的单元测试并不是一个符合定义的单元测试。是什么导致它花费这么长时间?这是一个创建ZIP64文件的测试;该测试对一组文件进行加密,从而生成大于4gb的zipfile。然后zipfile被更新,并再次保存(两次)。代码大约有5行,周围有一个循环。但是有很多很多的I/O和大量的DEFLATE。你真的是说单元测试的定义包括时间限制吗?时限是多少?啊!这是什么意思?“启动GUI线程”是什么意思?太好了!顺便说一下,使用System.Diagnostics.Debug甚至可以让您在输出窗口中看到输出
    [TestMethod]
    public void ProgressTest()
    {
        int nLastWritten = -1, nTotal = 10000;

        for (int i = 0; i < nTotal; i++)
        {
            int nProgress = 100 * i / nTotal;
            if (nProgress > nLastWritten)
            {
                System.Diagnostics.Trace.WriteLine("Progress: " + nProgress + "%");
                nLastWritten = nProgress;
            }
        }
    }