Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python twisted试用中超时后未调用tearDown?_Python_Testing_Twisted_Trial - Fatal编程技术网

Python twisted试用中超时后未调用tearDown?

Python twisted试用中超时后未调用tearDown?,python,testing,twisted,trial,Python,Testing,Twisted,Trial,我在我的测试套件中发现了一个问题,在我得到一个超时之前,一切都正常。如果一个测试由于超时而失败,那么将永远不会调用tearDown函数,从而使反应器不干净,从而导致其余测试失败。我认为应该在超时后调用tearDown,有人知道为什么会发生这种情况吗?无论测试中发生了什么,都应该调用tearDown(),这是正确的。对于拆卸(),从: 即使测试方法引发异常,也会调用此函数 然而,有一个陷阱。来自同一文件: 无论测试方法的结果如何,仅当setUp()成功时才会调用此方法 因此,听起来您可能在setU

我在我的测试套件中发现了一个问题,在我得到一个超时之前,一切都正常。如果一个测试由于超时而失败,那么将永远不会调用tearDown函数,从而使反应器不干净,从而导致其余测试失败。我认为应该在超时后调用tearDown,有人知道为什么会发生这种情况吗?

无论测试中发生了什么,都应该调用
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已经被调用),但是它仍然有一个未完成的回调链。从我在这里的试验代码中可以看到,当这种情况发生时,反应堆会崩溃,这解释了为什么拆卸没有被调用。我的解决方案是从有问题的测试中返回一个延迟的测试,该测试没有一个长时间存在的回调链(它的回调本身不返回延迟)。

有没有办法判断安装是否失败?看起来它正在成功完成并继续测试。然后它在测试中失败,并且从未调用过拆卸超时是否引发异常?如果是这样,您可以尝试捕获该异常。但很难说没有看到方法。你能把
设置的代码添加到你的问题中吗?有没有办法判断设置是否失败?看起来它正在成功完成并继续测试。然后,它在测试中失败,并且拆卸永远不会得到