Python twisted试用中超时后未调用tearDown?
我在我的测试套件中发现了一个问题,在我得到一个超时之前,一切都正常。如果一个测试由于超时而失败,那么将永远不会调用tearDown函数,从而使反应器不干净,从而导致其余测试失败。我认为应该在超时后调用tearDown,有人知道为什么会发生这种情况吗?无论测试中发生了什么,都应该调用Python twisted试用中超时后未调用tearDown?,python,testing,twisted,trial,Python,Testing,Twisted,Trial,我在我的测试套件中发现了一个问题,在我得到一个超时之前,一切都正常。如果一个测试由于超时而失败,那么将永远不会调用tearDown函数,从而使反应器不干净,从而导致其余测试失败。我认为应该在超时后调用tearDown,有人知道为什么会发生这种情况吗?无论测试中发生了什么,都应该调用tearDown(),这是正确的。对于拆卸(),从: 即使测试方法引发异常,也会调用此函数 然而,有一个陷阱。来自同一文件: 无论测试方法的结果如何,仅当setUp()成功时才会调用此方法 因此,听起来您可能在setU
tearDown()
,这是正确的。对于拆卸()
,从:
即使测试方法引发异常,也会调用此函数
然而,有一个陷阱。来自同一文件:
无论测试方法的结果如何,仅当setUp()成功时才会调用此方法
因此,听起来您可能在
setUp()
中启动了反应堆,当反应堆超时时,这会阻止tearDown()
运行,因为您在setUp()
中尝试“设置”的内容没有成功设置,所以您不想尝试将其拆除。但是,除非您提供设置
和拆卸
方法的代码以及任何相关测试的代码,否则很难确定诊断 不管测试中发生了什么,都应该调用tearDown()
,这是正确的。对于拆卸()
,从:
即使测试方法引发异常,也会调用此函数
然而,有一个陷阱。来自同一文件:
无论测试方法的结果如何,仅当setUp()成功时才会调用此方法
因此,听起来您可能在
setUp()
中启动了反应堆,当反应堆超时时,这会阻止tearDown()
运行,因为您在setUp()
中尝试“设置”的内容没有成功设置,所以您不想尝试将其拆除。但是,除非您提供设置
和拆卸
方法的代码以及任何相关测试的代码,否则很难确定诊断 这很奇怪,因为在我的盒子上,即使发生超时,也会执行拆卸。如果反应器未处于清洁状态,测试应停止运行,除非您使用--未清洁警告
标志。测试运行程序是否在超时后停止?您正在运行哪个版本的Python和Twisted
作为旁注,如果需要为特定测试函数运行唯一的拆卸,那么有一个非常方便的回调。如果您需要取消callback、LoopingCall或callLater函数,以使反应器不处于脏状态,那么它非常有用addCleanup
返回一个Deferred
,这样您就可以链接执行临时拆卸的回调。如果类拆卸对您不起作用,那么这可能是一个很好的选择
PS
我已经习惯于编写“行为良好”的扭曲代码,我甚至不记得如何进入一个不干净的反应堆状态:我发誓我不是在吹牛。你能给我一个你正在做什么的简要总结,这样我就可以在我这边测试它了吗?这很奇怪,因为在我的盒子上,即使发生超时,撕裂也会执行。如果反应器未处于清洁状态,测试应停止运行,除非您使用
--未清洁警告
标志。测试运行程序是否在超时后停止?您正在运行哪个版本的Python和Twisted
作为旁注,如果需要为特定测试函数运行唯一的拆卸,那么有一个非常方便的回调。如果您需要取消callback、LoopingCall或callLater函数,以使反应器不处于脏状态,那么它非常有用addCleanup
返回一个Deferred
,这样您就可以链接执行临时拆卸的回调。如果类拆卸对您不起作用,那么这可能是一个很好的选择
PS
我已经习惯于编写“行为良好”的扭曲代码,我甚至不记得如何进入一个不干净的反应堆状态:我发誓我不是在吹牛。你能给我一个你正在做的事情的简要总结,这样我就可以在我这方面进行测试了吗?我发现了问题,我将把它放在这里,以防将来对其他人有所帮助
我从已经被调用的测试返回了一个deferred(比如,deferred.callback已经被调用),但是它仍然有一个未完成的回调链。从我在这里的试验代码中可以看到,当这种情况发生时,反应堆会崩溃,这解释了为什么拆卸没有被调用。我的解决方案是从有问题的测试中返回一个延迟的测试,该测试没有一个长时间存在的回调链(它的回调本身不返回延迟)。我发现了问题,我将把它放在这里,以防它对将来的任何人都有帮助
我从已经被调用的测试返回了一个deferred(比如,deferred.callback已经被调用),但是它仍然有一个未完成的回调链。从我在这里的试验代码中可以看到,当这种情况发生时,反应堆会崩溃,这解释了为什么拆卸没有被调用。我的解决方案是从有问题的测试中返回一个延迟的测试,该测试没有一个长时间存在的回调链(它的回调本身不返回延迟)。有没有办法判断安装是否失败?看起来它正在成功完成并继续测试。然后它在测试中失败,并且从未调用过拆卸超时是否引发异常?如果是这样,您可以尝试捕获该异常。但很难说没有看到方法。你能把
设置的代码添加到你的问题中吗?有没有办法判断设置是否失败?看起来它正在成功完成并继续测试。然后,它在测试中失败,并且拆卸永远不会得到