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

时间:2015-08-20 10:42:25

标签: 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的一部分,因此请求和响应都在json

我如何:

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用@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_f2

答案 1 :(得分:2)

django提供一些脚手架进行测试 - 请参阅docs

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