问题描述
我正在将一些代码和相关测试从python 2迁移到python 3(特别是2.7到3.7),并且遇到了这种奇怪的行为,我想了解:
try:
from unittest import mock # python 3
except ImportError:
import mock # python 2
import os
import signal
def do_signal(mock_type):
def side_effect(signum,frame):
print('Called for ' + mock_type.__name__)
handler = mock_type(side_effect=side_effect)
signal.signal(signal.SIGTERM,handler)
os.kill(os.getpid(),signal.SIGTERM)
print(handler.call_count)
do_signal(mock.Mock)
do_signal(mock.MagicMock)
在这里,我使用mock.Mock
或mock.MagicMock
作为信号处理程序,并且在将信号发送到当前进程后,打印出模拟被调用的次数。
在python 2.7中,它打印出来:
Called for Mock
1
Called for MagicMock
1
但是对于python3.7,它会打印出来:
Called for Mock
1
0
对于python 3,MagicMock似乎根本没有被调用。颠倒do_signal
调用的顺序不会改变这一点。
Mock
和MagicMock
之间的行为差异可以解释这一点,为什么行为从python 2变为3?我知道mock
是作为unittest.mock
添加到python 3的标准库中的,所以我很好奇这里是否有所改变。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)