Python Mock импортировал библиотечную пену - PullRequest
0 голосов
/ 25 мая 2018

У меня есть класс, который использует клиент 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
...