py.test在捕获预期的异常

时间:2017-05-06 06:37:48

标签: python pytest

我有一个非常简单的测试函数,如下所示:

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 ========================================

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

答案是:一个挂起的析构函数调用。

我的结论是,当我不期望/捕获异常时,exc_info将保留对对象的引用,防止析构函数运行。

(在我的情况下,我使用pyzmq超时,但没有设置LINGER套接字选项,因此pyzmq套接字的破坏将等待不存在的远程端发送内容。)