我有一个 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/