解决SpecFlow ScenarioContext正在处理的错误

时间:2016-08-02 16:35:57

标签: c# specflow

在我们的应用程序测试套件中,我们有随机测试失败并出现此错误:     测试'Some_Test_Name'超出执行超时期限。

当我们收到类似的错误时,紧接着的测试也会因此错误而失败:     System.Threading.ThreadAbortException:线程正在中止。     标准输出消息:         - >警告:未处理先前的ScenarioContext。         - >错误:线程正在中止。

我已经尝试了各种各样的事情来解决这个问题,但是我还没有找到一种方法来访问ScenarioContext,以便在它应该存在的情况下将其处理掉。我试过从BeforeScenario访问它,但总是会在它被击中之前发生错误。

我们已经解决了一些超时问题,但对于仍然出现的随机问题,我希望能够减少ScenarioContext问题导致的失败,并从我的测试结果中删除这些误报。有什么想法吗?

3 个答案:

答案 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

See here for explicit interface implementations