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

The*_*ous 6 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)
Run Code Online (Sandbox Code Playgroud)

函数f2在另一个模块中

# some_module
def f2(**kargs):
    # some code
Run Code Online (Sandbox Code Playgroud)

Django视图是API的一部分,因此请求和响应位于json中

我如何 :

  1. 在模拟请求时为此功能编写单元测试
  2. 模拟f2,这是一个基于数据库的功能,完全避免了数据库连接

编辑:

我正在使用的数据库是Cassandra,所以我不能使用django.db

ver*_*4ka 6

您可以使用@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'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每次您调用f2()代码时,mocked_f2都会被调用。

  • 我认为代码不需要更多解释 (2认同)