2015-08-14 3 views
1

Я хочу издеваться аргумент по умолчанию в конструкторе класса:питон инициализации фиктивный аргумент по умолчанию класса

class A (object): 
    def __init__(self, connection=DefaultConnection()): 
     self.connection = connection 

Я хочу издеваться DefaultConnection в моих UnitTests, но он не работает, когда передается как значение по умолчанию стоимость.

+0

Как вам обе передавать это значение по умолчанию plz? Я думал, что по умолчанию есть, если вы НЕ передаете значение ... также выполнение кода инициализации класса во время определения другого класса не очень мудро ('DefaultConnection()' выполняется уже во время импорта модуля, а не во время инициализации из 'a = A()', если я его правильно понимаю) – Aprillion

+0

Возможный дубликат [Параметры параметров конструктора класса Mocking в Python] (http://stackoverflow.com/questions/36704191/mocking-class-constructor-default-parameters- в-питон) –

ответ

1

Вы можете использовать патч для модуля patch, а затем вы можете установить возвращаемое значение как макет.

# --- a.py (in package path x.y) -- 
from c import DefaultConnection 

class A (object): 
    def __init__(self, connection=DefaultConnection()): 
     self.connection = connection 

#---- a_test.py ---- 
from mock import patch 
from a import A 

@patch('x.y.a.DefaultConnection') 
def test(def_conn_mock): 
    conn_mock = Mock() 
    def_conn_mock.return_value = conn_mock 

    a_obj = A() 
    ....