【发布时间】:2009-11-04 04:56:47
【问题描述】:
我的目标是通过使用 ClassCleanup 属性的闪回恢复运行大量单元测试后将 Oracle 数据库恢复到之前的状态。
我已经编写了一个批处理文件 + SQL 来正确恢复数据库。这已经在我的命令提示符中进行了多次测试,没有问题
我通常会将还原作为清理脚本放在测试运行配置中,但是我需要包含一个时间来将数据库闪回到(在 ClassInitialize 上设置)
try
{
ProcessStartInfo startInfo = new ProcessStartInfo(@"SomeProjectDirectory\flashback.bat");
startInfo.CreateNoWindow = false;
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.ErrorDialog = true;
startInfo.Arguments = Arguments;
startInfo.UseShellExecute = true;
Process batchExecute = new Process();
batchExecute.StartInfo = startInfo;
batchExecute.Start();
batchExecute.WaitForExit();
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.ToString());
}
批处理文件执行良好,但问题似乎是 ClassCleanup 方法在完成之前超时
它不会在 WaitForExit() 之后遇到任何断点或捕获任何异常。它只是在过程中途退出命令提示符窗口,并让我知道所有测试都成功,没有错误消息。
我尝试将 Timeout 属性添加到具有大量数字的 ClassCleanup 方法,但这似乎也无济于事。我相当肯定这个属性只适用于单元测试而不是类清理
我将该过程移到了 TestCleanup 方法中,它可以正常工作。该过程在测试中也运行良好。它似乎只在 ClassCleanup 和 AssemblyCleanup 方法中超时
我的印象是超时,因为每次我们运行测试时,它总是在同一点退出,但是如果我们在脚本中添加或删除步骤,它会比正常情况更早或更晚地退出
【问题讨论】:
标签: c# visual-studio unit-testing