解决 SpecFlow ScenarioContext 被处置错误
Resolving SpecFlow ScenarioContext being disposed errors
在我们的应用程序测试套件中,我们有随机测试因以下错误而失败:
测试 'Some_Test_Name' 超出了执行超时期限。
当我们遇到这样的错误时,紧随其后的测试也会失败并出现此错误:
System.Threading.ThreadAbortException: 线程被中止。
标准输出消息:
-> 警告:之前的 ScenarioContext 没有被释放。
-> 错误:线程被中止。
我已经尝试了各种方法来解决这个问题,但我还没有找到一种方法来访问 ScenarioContext 以在它应该在的情况下处理它。我试过从 BeforeScenario 访问它,但总是在它被击中之前发生错误。
我们解决了一些超时问题,但对于仍然出现的随机问题,我希望能够减少由 ScenarioContext 问题引起的失败并从我的测试结果中删除那些误报。有什么想法吗?
警告 The previous ScenarioContext was not disposed
通常在测试未完成或 AfterScenario
方法抛出异常时发生。
我相信这个警告是良性的,可以安全地忽略。当您防止测试超时或允许测试 运行 成功完成(通过防止 AfterScenario
方法抛出。
我也遇到了同样的问题。我通过在 [AfterScenario] 块中实现 try-finally 解决了这个问题。
try
{
//your stuff
}
finally
{
driver.Dispose();
}
在我看来,这应该也适用于您。
private void DisposeSpecFlowContext()
{
try
{
var disposableContext = ScenarioContext.Current as IDisposable;
disposableContext.Dispose();
}
catch
{
}
}
在[AfterScenario()]
方法中调用此方法。
能够处理的技巧是将其转换为 IDisposable。显然这是明确实施的。
如果你想更加安全,你可以检查 disposableContext
不是 null
.
在我们的应用程序测试套件中,我们有随机测试因以下错误而失败: 测试 'Some_Test_Name' 超出了执行超时期限。
当我们遇到这样的错误时,紧随其后的测试也会失败并出现此错误: System.Threading.ThreadAbortException: 线程被中止。 标准输出消息: -> 警告:之前的 ScenarioContext 没有被释放。 -> 错误:线程被中止。
我已经尝试了各种方法来解决这个问题,但我还没有找到一种方法来访问 ScenarioContext 以在它应该在的情况下处理它。我试过从 BeforeScenario 访问它,但总是在它被击中之前发生错误。
我们解决了一些超时问题,但对于仍然出现的随机问题,我希望能够减少由 ScenarioContext 问题引起的失败并从我的测试结果中删除那些误报。有什么想法吗?
警告 The previous ScenarioContext was not disposed
通常在测试未完成或 AfterScenario
方法抛出异常时发生。
我相信这个警告是良性的,可以安全地忽略。当您防止测试超时或允许测试 运行 成功完成(通过防止 AfterScenario
方法抛出。
我也遇到了同样的问题。我通过在 [AfterScenario] 块中实现 try-finally 解决了这个问题。
try
{
//your stuff
}
finally
{
driver.Dispose();
}
在我看来,这应该也适用于您。
private void DisposeSpecFlowContext()
{
try
{
var disposableContext = ScenarioContext.Current as IDisposable;
disposableContext.Dispose();
}
catch
{
}
}
在[AfterScenario()]
方法中调用此方法。
能够处理的技巧是将其转换为 IDisposable。显然这是明确实施的。
如果你想更加安全,你可以检查 disposableContext
不是 null
.