У меня есть класс, который использует клиент suds в нескольких местах для выполнения некоторых вызовов XML на другой сервер.Никаких проблем, когда код выполняется, однако я не могу понять, как смоделировать создание клиента suds в конструкторе классов так, чтобы он создавал поддельный объект и не использовал настоящий сокет.Мы пробовали несколько перестановок mock.patch
.mocker.patch
и т.д .;но те, которые запускаются, приводят к ошибке сокета, а остальные приводят к AttributeError или ImportError .
Это тупая версия класса:
from suds.client import Client
from suds.transport.https import HttpAuthenticated
class MYClass(object):
def __init__(self, host, usern, passw, provisioning_timeout=90):
wsdl_url = 'https://{host}/server/GetWsdl?wsdl'.format(host=host)
transport = CustomTransport()
try:
self.client = Client(wsdl_url, transport=transport, timeout=5)
def run_wsdl(self, data):
result = self.client.service.testwsdl(data=data)
return result
И это то, что я пытаюсь запустить через юнит-тест
from me import my_class
from mock import patch
#These are some of the many permutations we've tried
@patch('my_class.MYClass.suds.client.Client') #ImportError, no suds
@patch('my_class.Client') #Socket use error in __init__
@patch('my_class.suds.client.Client') #ImportError, no suds
def test_sip_stuff(mock_client):
with patch.object(mock_client.client.service, 'testwsdl') as mockwsdl:
mockwsdl.return_value = good_wsdl_data
test_instance = my_class.MYClass(
host='10.10.10.20',
usern='user',
passw='pass'
)
return_value = test_instance.run_wsdl(data='something')
assert return_value == good_wsdl_data