gpt4 book ai didi

python - 我是否在 Django 测试中 mock 这个辅助函数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:59 24 4
gpt4 key购买 nike

lib.py

from django.core.urlresolvers import reverse
def render_reverse(f, kwargs):
"""
kwargs is a dictionary, usually of the form {'args': [cbid]}
"""
return reverse(f, **kwargs)

测试.py

from lib import render_reverse, print_ls

class LibTest(unittest.TestCase):

def test_render_reverse_is_correct(self):
#with patch('webclient.apps.codebundles.lib.reverse') as mock_reverse:
with patch('django.core.urlresolvers.reverse') as mock_reverse:
from lib import render_reverse
mock_f = MagicMock(name='f', return_value='dummy_views')
mock_kwargs = MagicMock(name='kwargs',return_value={'args':['123']})
mock_reverse.return_value = '/natrium/cb/details/123'
response = render_reverse(mock_f(), mock_kwargs())

print mock_reverse.mock_calls # prints []
print mock_reverse.mock_calls # prints []
self.assertTrue('/natrium/cb/details/' in response)

但相反,我得到

  File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/core/urlresolvers.py", line 296, in reverse
"arguments '%s' not found." % (lookup_view_s, args, kwargs))
NoReverseMatch: Reverse for 'dummy_readfile' with arguments '('123',)' and keyword arguments '{}' not found.

为什么它调用 reverse 而不是我的 mock_reverse (它正在查找我的 urls.py!!)您可以看到 calls 返回一个空列表。我什至断言mock_reverse.called并且它返回了false。

也许我没有提到这一点,但是lib只是一堆函数,没有类。

最佳答案

有两件事。 1. 您需要从 Django 修补reverse。 2.您需要在上下文管理器中进行导入,以使lib模块导入模拟reverse

from lib import print_ls

class LibTest(unittest.TestCase):

def test_render_reverse_is_correct(self):
with patch('django.core.urlresolvers.reverse') as mock_reverse:
from lib import render_reverse
mock_f = MagicMock(name='f', return_value='dummy_view')
mock_kwargs = MagicMock(name='kwargs',return_value={'args':['123']})
mock_reverse.return_value = '/natrium/cb/details/123'
response = render_reverse(mock_f, mock_kwargs)

self.assertTrue('/natrium/cb/details/' in response)

关于python - 我是否在 Django 测试中 mock 这个辅助函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085763/

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