2015-12-08 7 views
0

Итак, я запускаю py.test и пытаюсь использовать monkeypatch. Я понимаю, что целью обезьяны является замена атрибутов в модуле, чтобы они могли быть протестированы. И я понимаю, что мы можем заменить их макетными функциями, чтобы сделать это.Патч обезьяны не работает должным образом

В настоящее время я пытаюсь запустить по существу следующий блок кода.

from src.module.submodule import * 

def mock_function(parameter = None): 
    return 0 

def test_function_works(monkeypatch): 
    monkeypatch.setattr("src.module.submodule.function",mock_function ] 
    assert function(parameter = None) == 0 

При запуске теста, вместо замены в mock_function, он просто работает function. Может ли быть причина, по которой monkeypatch не активируется

У меня есть патч обезьяны, успешно работающий с другим кодом раньше. Поэтому я не понимаю, почему это не работает.

ответ

0

Я не использовал pytest для этого материала, но я знаю, что с библиотекой mock функции исправлены в пространстве имен, где они вызываются. то есть from src.module.submodule import * импортирует src.module.submodule.function в ваше пространство имен, но затем вы его исправляете в своем исходном пространстве имен, поэтому ваше локальное имя для функции по-прежнему обращается к исходному, нераспакованному коду.

Если изменить это

import src.module.submodule 

def mock_function(parameter = None): 
    return 0 

def test_function_works(monkeypatch): 
    monkeypatch.setattr("src.module.submodule.function",mock_function ] 
    assert src.module.submodule.function(parameter = None) == 0 

это удается?

+0

Это сработало! TY –

1

Выглядит как опечатка, не должна быть

monkeypatch.setattr("src.module.submodule.function",mockIfunction) 

т.е. mockIfunction вместо mock_function?

+0

все это поддельные имена файлов, поэтому игнорируйте опечатки. Я не могу опубликовать фактический рабочий код –

+1

Но, предположительно, 'mockIfunction' и' mock_function' должны совпадать, в противном случае вы издеваетесь над своей функцией? –