python - 如何模拟我的函数之一的输出以进行单元测试?

标签 python django testing mocking

我有一个 python (django) Web 应用程序。它使用外部网络服务(Facebook Graph)。所有用于进行外部(http)调用的代码都包装在一个额外的函数(称为 facebook_api )中,该函数接受一些参数并返回一个解析后的字典(它执行一些日志记录、检查错误等)这个功能,我写了一些代码。我想对这段代码进行一些单元测试。

我如何用一些已知的输入“模拟”这个函数?即我想为我的 facebook_api 函数提供一些输入和输出(即如果您看到这个输入,则返回这个,如果是这个,则返回那个,等等)。然后我想检查我的代码是否可以正常处理它。

我想为我的代码提供各种不同的场景(如果 API 开始返回这个或那个会怎样),并检查我的代码是否符合我的要求。我实际上不想发出外部 (http) 请求。

我尝试查看一些模拟库(例如http://www.voidspace.org.uk/python/mock/),但他们总是谈论创建类对象,或者只是检查是否调用了某些东西。我看不到简单的方法来表达“拦截这个函数,如果输入是A,则返回X,如果输入是D,则返回B”

最佳答案

我认为您正在寻找 Mock's side_effect 。例如

def my_facebook_api(input):
    if input=='A':
        return 'X'
    elif input=='B':
        return 'D'

facebook_api =  Mock(side_effect=my_facebook_api)

关于python - 如何模拟我的函数之一的输出以进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724872/

相关文章:

javascript - JavaScript 中的函数 '.test'。测试变量

c# - 为 XP、Win 7 和 Vista 开发——我需要单独测试 Vista 吗?

Python 没有找到使用 home 标志的目录~

python - 如何计算多项式拟合的误差(斜率和截距)

django - python的datetime.date减去django.db.models.DateField得到年龄

python - 如何在模板中显示本地时间

javascript - Django 中的电子邮件确认实现

python - tensorflow MNIST TFRecord

python - 使用 Matplotlib 在对数刻度上绘制直方图

google-chrome - 如何在 chromedp 中使用 Chrome headless?