首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Django: mock入门

Python Django: mock入门
EN

Stack Overflow用户
提问于 2017-08-05 04:36:32
回答 1查看 79关注 0票数 0

我有以下代码,我正在尝试创建一个测试(仍在进行中):

代码语言:javascript
复制
from core.tests import BaseTestCase                                                                          
from core.views import get_request                                                                           

from entidades.forms import InstituicaoForm                                                                  
from mock import patch                                                                                       


class InstituicaoFormTestCase(BaseTestCase):                                                                 

    def setUp(self):                                                                                         
        super(InstituicaoFormTestCase, self).setUp()                                                         

    @patch('get_request', return_value={'user': 'usuario_qualquer'})                                         
    def test_salva_instituicao_quando_informaram_convenio():                                                    
        import pdb                                                                                              
        pdb.set_trace()                                                                                         
        form = InstituicaoForm()

它失败的原因是,当我尝试创建InstituicaoForm时,get_request被调用:

代码语言:javascript
复制
def get_request():
    return getattr(THREAD_LOCAL, 'request', None)

它处理了这个错误

代码语言:javascript
复制
entidades/tests.py:11: in <module>
    class InstituicaoFormTestCase(BaseTestCase):
entidades/tests.py:16: in InstituicaoFormTestCase
    @patch('get_request', return_value={'user': 'usuario_qualquer'})
.tox/unit/local/lib/python2.7/site-packages/mock/mock.py:1670: in patch
    getter, attribute = _get_target(target)
.tox/unit/local/lib/python2.7/site-packages/mock/mock.py:1522: in _get_target
    (target,))
E   TypeError: Need a valid target to patch. You supplied: 'get_request'
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering PDB >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /home/vinicius/telessaude/.tox/unit/local/lib/python2.7/site-packages/mock/mock.py(1522)_get_target()
-> (target,))

我做错了什么?应该如何模拟这个get_request()方法?

EN

回答 1

Stack Overflow用户

发布于 2017-08-06 11:17:28

我认为你想要做的具体事情可以这样做:

代码语言:javascript
复制
@patch('core.views.get_request', return_value={'user': 'usuario_qualquer'})

但是,如果您还没有看过Django testing documentation,那么也应该看看它。您可以使用测试客户端来伪造web请求。

如果您想尝试不访问数据库的模拟测试,请查看Django Mock Queries。(我是这个项目的一个小贡献者。)我也尝试过模拟视图,但它很麻烦。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45515107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档