Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单元测试Python:模拟函数内部的函数调用_Python_Django_Unit Testing_Mocking - Fatal编程技术网

单元测试Python:模拟函数内部的函数调用

单元测试Python:模拟函数内部的函数调用,python,django,unit-testing,mocking,Python,Django,Unit Testing,Mocking,我有这样的django观点 # Django view from some_module import f2 def f1(request, version): # some code f2(**kargs) # more code return HTTPResponse(response) 功能f2位于另一个模块中 # some_module def f2(**kargs): # some code Django视图是API的一部分,因此请求和

我有这样的django观点

# Django view

from some_module import f2
def f1(request, version):
    # some code

    f2(**kargs)

    # more code
    return HTTPResponse(response)
功能f2位于另一个模块中

# some_module
def f2(**kargs):
    # some code
Django视图是API的一部分,因此请求和响应是json格式的

我如何:

  • 模拟请求时为此函数编写单元测试
  • 模拟f2,这是一个基于数据库的函数,完全避免数据库连接
  • 编辑:


    我使用的数据库是Cassandra,因此我无法使用django.db

    django提供了一些用于测试的脚手架-请参阅


    至于
    f2()
    -您可以使用设置数据库。或者使用提供虚拟数据库连接。

    您可以在unittests中使用
    @mock.patch
    装饰器来模拟
    f2()
    方法

    import mock
    import some_module
    from django.test import TestCase
    
    def mocked_f2(**kargs):
        return 'Hey'
    
    class YourTestCase(TestCase):
    
        @mock.patch('some_module.f2', side_effect=mocked_f2)
        def test_case(self):
            print some_module.f2()  # will print: 'Hey'
    

    在这种情况下,每次在代码中调用
    f2()
    ,都会调用
    mocked\u f2

    f2()
    只是将一些数据写入数据库。我希望它在f1赛车中完全被模仿。如果我想测试<代码> f1()/<代码>,它会模拟所有的<代码> f2()>代码>调用,即使你对它们做了via<代码> f1()>代码>方法,请考虑编辑你的帖子,以添加更多关于你的代码所做的解释以及为什么它会解决这个问题的解释。一个只包含代码的答案(即使它在工作)通常不会帮助OP理解他们的问题。我认为代码不需要更多的解释