Python模拟如何编辑模拟函数的返回值

Python模拟如何编辑模拟函数的返回值,python,mongodb,unit-testing,flask,mocking,Python,Mongodb,Unit Testing,Flask,Mocking,我在一个单独的文件中有一个函数,在另一个文件中有一个unittest,我的目标是获取函数的实际返回值并对其进行编辑 my_module.py def功能到测试(a、b、c)(arg1、arg2、arg3): data_to_send=Mongoclient.find({u id:'arg1'}) 将数据返回到发送 定义另一个函数() “做点什么。” 使用的值=功能测试(a、b、c) 另一个函数调用另一个模块中的函数(要使用的值) test\u file.py classmytest(unitt

我在一个单独的文件中有一个函数,在另一个文件中有一个unittest,我的目标是获取函数的实际返回值并对其进行编辑

my_module.py

def功能到测试(a、b、c)(arg1、arg2、arg3):
data_to_send=Mongoclient.find({u id:'arg1'})
将数据返回到发送
定义另一个函数()
“做点什么。”
使用的值=功能测试(a、b、c)
另一个函数调用另一个模块中的函数(要使用的值)
test\u file.py

classmytest(unittest.TestCase):
def测试一(自身):
#返回值基于原始返回值,
#并且应根据原始返回值进行更改
使用补丁(my_module.function_to_test,return_value='new data'):
my_模块。另一个_函数()
新数据是原始数据+对原始数据的一些编辑

我如何做到这一点?

  • 您可以保留对原始函数的引用
  • 然后你可以定义你的补丁函数来调用原始函数并添加一些数据
  • 然后,您可以使用补丁函数作为模拟的副作用
classmytest(unittest.TestCase):
def测试一(自身):
#返回值基于原始返回值和
#应根据原始返回值而变化
原始=我的模块功能到测试
def已修补(arg1、arg2、arg3):
原始结果=原始(arg1、arg2、arg3)
返回原始_结果+“@新数据”
使用补丁(“我的模块功能测试”,副作用=补丁):
结果=我的_模块。另一个_函数()
断言结果==“旧数据@新数据”,结果
def功能到测试(arg1、arg2、arg3):
返回“旧数据”
定义另一个模块中的另一个函数调用(要使用的值):
返回要使用的值
定义另一个函数()
#做点什么
a、 b,c=1,2,3
使用的值=功能测试(a、b、c)
返回另一个模块中的另一个函数调用(要使用的值)
一些参考资料:

  • 副作用
  • 补丁

  • 另一个函数如何与
    函数1
    交互?是否有一种方法可以针对不同的测试用例以编程方式更改“新数据”?例如在每个测试中定义不同的
    补丁
    函数?或者,根据
    原始
    的结果更改
    新数据
    ?根据我可以发送到函数的参数更改新数据。同样,在第一行中,将“原始”赋值给函数1时,应该出现的参数丢失。原始函数应该接收仅在my_module.py文件中出现的参数。哦,复制对原始函数的引用时,这些参数不会丢失。我已经更新了我的答案,让它更清楚。