Я пытаюсь использовать monkeypatch
, чтобы высмеять одну публичную функцию, но, похоже, она не работает для меня.Python monkeypatch не исправляет функцию правильно
Вот моя структура
myproject
|-mrss
|- feed_burner.py <- has get_feed()
|- version_controller.py <- has get_version()
|-tests
|-feed_burner_tests.py
файл Вот мой тест
from mrss.feed_burner import get_feed
from _pytest.monkeypatch import monkeypatch
def test_first_feed(self):
mp = monkeypatch()
mp.setattr(mrss.version_controller, 'get_version', lambda env: 7)
mrss_feed = get_feed(env=get_config())
root = ET.fromstring(mrss_feed)
self.assertEquals(21, len(programmes))
И это моя get_feed функция
from mrss.version_controller import get_version
def get_feed(env=os.environ):
uploader = Uploader(env=env)
folder = env.get('S3_FOLDER')
version = get_version(env)
print version.isdigit()
print 'version is {v}'.format(v=str(version))
if not version or not version.isdigit():
return ''
И все, что я получил за get_version
пустая строка
False
version is
Я пытался с этим, но не повезло
with patch('mrss.feed_burner.get_feed.mrss.version_controller.get_version', new=lambda env: 7):
mrss_feed = get_feed(env=get_config())
root = ET.fromstring(mrss_feed)
programmes = root.findall('programme')
self.assertEquals(21, len(programmes))
Является ли тест в том же файле, что и определение 'get_feed'? – chepner
Нет. Они не находятся в одном файле. Я обновлю свой полный тест – toy
Возможно, вы исправляете неправильную функцию. Если 'get_feed' находится в файле' mycode.py', вам нужно исправить 'mycode.mrss.versioncontroller', а не' mrss.versioncontroller', импортированный в ваш тестовый модуль. Модуль 'mock' описывает [что исправлять] (http://mock.readthedocs.org/en/latest/patch.html#where-to-patch), и я подозреваю, что вы испытываете ту же проблему (и решение это то же самое, хотя я не уверен, что на самом деле опубликую ответ). – chepner