Борьба с макетом UDP-сокетов в Python 2.7.
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 у меня есть фиктивный объект, и я его вызываю.По какой-то причине я не могу добраться до того же макета в моем тестовом коде.
Что-то не так с моим макетом, настроенным где-то, но я не вижу, что.