gpt4 book ai didi

Python Monkeypatch 无法正确修补函数

转载 作者:行者123 更新时间:2023-12-01 04:38:53 24 4
gpt4 key购买 nike

我正在尝试使用 monkeypatch 来模拟一个公共(public)函数,但它似乎对我不起作用。

这是我的文件结构

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))

最佳答案

在您的测试函数中,

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 引用的函数对象不会调用 mrss.version_controller.get_version,这是测试模块使用的引用。它确实调用mrss.feed_burner.mrss.version_controller.get_version,这就是您需要进行猴子修补的内容。 (get_feed 有其自己的模块范围引用,这与测试模块中的引用不同。)

关于Python Monkeypatch 无法正确修补函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com