努力在python 2.7中模拟UDP套接字。
test_udp_send.py
@patch("socket.socket")
def test_udp_send(mock_socket):
# Call to module that sends UDP message is here
assert mock_socket.sendto.call_count == 1
udp_send.py
...
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
buffer = get_data()
sock.sendto(buffer, (ipaddress, port))
...
运行测试时,出现以下错误消息:
> assert mock_socket.sendto.call_count == 1
E AssertionError: assert 0 == 1
E + where 0 = <MagicMock name='socket.sendto' id='75045800'>.call_count
E + where <MagicMock name='socket.sendto' id='75045800'> = <MagicMock name='socket' id='74744552'>.sendto
我在发送代码周围放置了print
条语句,可以看到它已被调用。
有趣的是,我的测试代码报告中对print
执行了mock_socket
:
<MagicMock name='socket' id='75186920'>
在发送UDP消息的实际代码中,我得到了:
<MagicMock name='socket()' id='75189048'>
这使我觉得出于某种原因我有两个不同的模拟对象。如果我然后将其添加到测试代码中,如下所示...
udp_send.py
...
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
buffer = get_data()
sock.sendto(buffer, (ipaddress, port))
print sock.sendto.call_count # Additional code
我在控制台中收到1
的报告。因此,在实际的udp发送代码中,我确实有一个模拟对象,并且正在调用它。由于某些原因,我无法在测试代码中使用相同的模拟。
我的模拟设备在某处设置有问题,但我看不到什么。