我有一个非常简单的测试函数,如下所示:
def test_timeout_connect():
with pytest.raises(minus_one_rpc.TimeoutExpired):
c = minus_one_rpc.Client("tcp://localhost:14247", recv_timeout = 100)
如果没有pytest.raises(...)
,我会收到带有预期异常的FAILED
测试。但是,当我尝试测试正确的异常时,py.test会在该测试中挂起。
此特定测试不涉及任何固定装置,但它似乎与拆卸有关,因为当我按下Ctrl-C时,测试报告为SUCCESS
!
test_minus_one_rpc.py::test_timeout_connect ^CPASSED
================================================== 27 tests deselected ==================================================
======================================== 1 passed, 27 deselected in 3.02 seconds ========================================
可能是什么原因?
答案 0 :(得分:1)
答案是:一个挂起的析构函数调用。
我的结论是,当我不期望/捕获异常时,exc_info将保留对对象的引用,防止析构函数运行。
(在我的情况下,我使用pyzmq超时,但没有设置LINGER套接字选项,因此pyzmq套接字的破坏将等待不存在的远程端发送内容。)