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