Получение двух экземпляров макета при попытке макета сокетов UDP - PullRequest
0 голосов
/ 13 сентября 2018

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

Что-то не так с моим макетом, настроенным где-то, но я не вижу, что.

...