2016-08-02 90 views
0

在我们的应用程序测试套件中,我们有随机测试失败并出现此错误: Test'Some_Test_Name'超出了执行超时期限。解决SpecFlow ScenarioContext被丢弃的错误

当我们得到这样的错误时,紧接着的测试也失败并出现此错误: System.Threading.ThreadAbortException:线程被中止。 标准输出消息: - >警告:以前的ScenarioContext未处理。 - >错误:线程正在中止。

我试过各种各样的东西来解决这个问题,但我还没有找到一种方法来访问ScenarioContext来处理它应该是它的情况下。我试着从BeforeScenario中访问它,但总是在错误发生之前发生。

我们解决了一些超时问题,但对于仍然存在的随机问题,我希望能够减少由ScenarioContext问题引起的故障,并从测试结果中删除这些误报。有任何想法吗?

回答

0

警告The previous ScenarioContext was not disposed通常在测试未完成或AfterScenario方法抛出异常时发生。

我相信这个警告是良性的,可以安全地忽略。当你防止你的测试超时,或者让测试成功完成(通过阻止AfterScenario方法抛出),它会消失。

+0

我几乎说的。我明确指出的是,我想删除假当发生这种情况时会出现这种情况,当你的测试运行时发生误报时,这不是一种良性的行为。 –

+0

我很喜欢如果你不觉得这回答了你的问题,你可以试试。我只是解释了这个警告是如何来自specflow代码的。阻止警告的唯一方法是防止超时方案中的超时或停止正在阻止运行清理的代码运行的方法中的异常。另一种方法是修复specflow代码,以便在导致此问题的任何一种情况下清除场景。 –

+0

如果你在specflow github页面上提出了一个问题,我会试着看看可以做些什么来解决它,但不能承诺任何时间尺度。 –

0

我也面临同样的问题。 - 最后在[AfterScenario]块。

try 
{ 
    //your stuff 
} 
finally 
{ 
    driver.Dispose(); 
} 

在我看来,这应该为你工作为好。

+0

一次运行多个测试时不起作用,因为如果一次失败,例如打到最后,然后驱动程序配置 – Danny

+0

最终应该在每次测试后实际配置驱动程序,不管是否失败。这是最后一点。 – nitzel