Python monkeypatch 无法正常运行
Python monkeypatch doesn't patch function correctly
我正在尝试使用 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
有自己的模块范围引用,这与测试模块中的引用不同。)
我正在尝试使用 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
有自己的模块范围引用,这与测试模块中的引用不同。)