Che*_*eso 7 unit-testing visual-studio-2008
有没有办法在Visual Studio 2008中显示单个TestMethod的进度?
在一组单元测试中,我有一个运行非常长时间的TestMethod - 通常需要30到60分钟.我使用[超时]属性设置了超时,没问题.但我希望能够直观地了解测试的进展情况.
我知道"测试结果"窗口提供了所有测试方法的可视化进度更新.我想要的是单个方法的视觉进度更新.在WinForms应用程序中,我会弹出一个ProgressBar控件.在控制台应用程序中,我将定位光标并显示状态消息.但这是一个单元测试.我可以写入TestContext,但在测试完成之前,该窗口是不可见的.
编辑:我知道有办法做到这一点; 它只是软件,所以总有办法.但是什么是简单实用的方法呢?
一种方法是创建一个TestMethodProgressMonitor.exe应用程序,该应用程序从命名管道读取,并根据通过管道传递的消息更新进度条.TestMethod可以shellExec TestMethodProgressMonitor.exe,然后写入命名管道.完成后,可能有一个众所周知的关闭命令,TestMethod发送到TestMethodProgressMonitor.exe应用程序.
另一个选项是将TestMethodProgressMonitor.exe构造为COM服务器,TestMethod可以使用COM(DCOM)更新应用程序中的托管进度条.
另一种选择是使用user32.dll SendMessage()方法将WM_COPYDATA消息发送到监视器应用程序.这有时用于远程控制应用程序.
这些是一些可能性.在我开始构建其中一个之前,我想知道是否有更简单的方法.
我刚刚启动一个带有进度条的Window的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();
}
Run Code Online (Sandbox Code Playgroud)