2016-12-06 2 views
2

В py.test monkeypatching/mocking documentation это не упоминается, но можно monkeypatch локальную переменную, введенную в тело функции?можно monkeypatch локальную переменную, введенную в тело функции?

мой эксперимент:

def my_method(): 
    my_var = 'foo' 
    return my_var[:2] 

тест:

def test_my_method(monkeypatch): 
    monkeypatch.setattr(my_module.MyClass.my_method.my_var, lambda: 'bar') 
    assert my_method() == 'ba' 

AttributeError: 'function' object at MyClass.my_method has no attribute 'my_var'

+1

Я не уверен, что вы пытаетесь сделать. Можете ли вы опубликовать какой-то минимальный код, с которым вы пытались перенестись monkeypatching, а также откинутую версию кода, к которому вы хотите применить его? (См. [Mcve].) Кроме того, что вы пытаетесь достичь путем патча обезьян? Возможно, есть лучший способ для вашего контекста. –

+0

У вас есть [tag: py.test] в тегах вашего вопроса. Вы пытаетесь заглушить/издеваться/подделывать/дублировать что-то для целей тестирования? –

+2

Переменная, определенная в локальной области действия метода, не эквивалентна атрибуту метода. Пожалуйста, покажите нам [MCVE]. –

ответ

4

Это невозможно, так как переменная не существует заранее и py.test не может вклиниться в создании насколько я знаю.

Смежные вопросы