У меня был предыдущий пост с проблемой насмешки над сокетом recv, и я столкнулся с другой проблемой в другом тесте, используя mock, которые похожи по своим ошибкам, и я думаю, что это сводится к общему неправильному пониманию mock.Итак, я делаю новое сообщение, потому что исходный вопрос более широк.
У меня есть следующий код:
import custom_lib
class classA:
def __init__.py(self):
self.s = socket.socket(socket.AF_INET,socket.STREAM)
self.p = custom_lib.classB()
def functionA:
buf = self.s.recv.decode()
self.p.somefunction()
И этот код не будет работать без проблем, теперь я хочу издеватьсяи socket / custom_lib в тестовом коде, и я делаю это следующим образом:
import unittest.mock
import pytest
def test_functionA:
with mock.patch('custom_lib.ClassB.somefunction') as mock_somefunc:
mock_somefunc.return_value = "hello"
with mock.patch('socket.socket') as mock_socket:
mock_socket.return_value.recv.decode.return_value = "hello123"
A = classA()
A.functionA()
Однако, с обеими ложными частями, он пройдет через функцию A и скажет, что эти функции / атрибуты не существуют.Я где-то читал, что нельзя смоделировать переменные, которые создаются внутри класса, но есть ли что-нибудь вокруг этого?