Python mock patch a function within another function

前端 未结 2 1051
被撕碎了的回忆
被撕碎了的回忆 2020-12-13 09:06
def f1():
    return 10, True

def f2():
    num, stat = f1()
    return 2*num, stat

How do I use python\'s mock library to patch f1()

相关标签:
2条回答
  • 2020-12-13 09:14

    Assuming that you're using this mock libary:

    def f1():
        return 10, True
    
    def f2():
        num, stat = f1()
        return 2*num, stat
    
    import mock
    
    print f2()   # Unchanged f1 -> prints (20, True)
    
    with mock.patch('__main__.f1') as MockClass:       # replace f1 with MockClass 
        MockClass.return_value = (30, True)     # Change the return value
    
        print f2()     # f2 with changed f1 -> prints (60, True)
    

    If your code is divided into modules you would probably need to replace __main__.f1 with the path to your module/function.

    0 讨论(0)
  • 2020-12-13 09:33

    First example suggests that f1() and f2() defined in the same module. Hence the following should work:

    from foo.bar import f2
    from mock import patch
    
    class MyTest(TestCase):
    
        @patch('foo.bar.f1')
        def test_f2_2(self, some_func):
            some_func.return_value = (20, False)
            num, stat = f2()
            self.assertEqual((num, stat), (40, False))
    

    Patch is on the same as import: @patch('foo.bar.f1')

    Here is a good answer on the issue:

    http://bhfsteve.blogspot.nl/2012/06/patching-tip-using-mocks-in-python-unit.html

    0 讨论(0)
提交回复
热议问题