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

时间:2019-12-13 11:24:09

标签: python mongodb unit-testing flask mocking

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

my_module.py

def function_to_test(a,b,c)(arg1,arg2,arg3):
     data_to_send = Mongoclient.find({_id:'arg1'})
     return data_to_send

def another_function():
     # Do something
     value_to_be_used = function_to_test(a,b,c)
     another_function_call_in_another_module(value_to_be_used)

test_file.py

class Mytest(unittest.TestCase):
     def test_one(self):
          with patch(my_module.function1, return_value ='new data'):  # the return_value is based on the original return value and should vary based on the original returned value
               my_module.another_function()

新数据是原始数据+对原始数据的一些编辑。我该如何实现。

1 个答案:

答案 0 :(得分:0)

  • 您可以保留对原始功能的引用。
  • 然后您可以定义修补的函数,该函数调用原始函数并添加一些数据。
  • 然后您就可以将修补函数用作side_effect的模拟了。
class Mytest(unittest.TestCase):
    def test_one(self):
        # the return_value is based on the original return value and
        # should vary based on the original returned value

        original = my_module.function_to_test

        def patched(arg1, arg2, arg3):
            original_result = original(arg1, arg2, arg3)
            return original_result + ' @ new data'

        with patch("my_module.function_to_test", side_effect=patched):
            result = my_module.another_function()

        assert result == 'old data @ new data', result
def function_to_test(arg1, arg2, arg3):
    return 'old data'


def another_function_call_in_another_module(value_to_be_used):
    return value_to_be_used


def another_function():
    # Do something
    a, b, c = 1, 2, 3
    value_to_be_used = function_to_test(a, b, c)
    return another_function_call_in_another_module(value_to_be_used)

一些参考文献: