Mocking python function based on input arguments

后端 未结 8 523
无人及你
无人及你 2020-12-22 21:15

We have been using Mock for python for a while.

Now, we have a situation in which we want to mock a function

def foo(self, my_param):
    #do someth         


        
8条回答
  •  失恋的感觉
    2020-12-22 22:04

    I've ended up here looking for "how to mock a function based on input arguments" and I finally solved this creating a simple aux function:

    def mock_responses(responses, default_response=None):
      return lambda input: responses[input] if input in responses else default_response
    

    Now:

    my_mock.foo.side_effect = mock_responses(
      {
        'x': 42, 
        'y': [1,2,3]
      })
    my_mock.goo.side_effect = mock_responses(
      {
        'hello': 'world'
      }, 
      default_response='hi')
    ...
    
    my_mock.foo('x') # => 42
    my_mock.foo('y') # => [1,2,3]
    my_mock.foo('unknown') # => None
    
    my_mock.goo('hello') # => 'world'
    my_mock.goo('ey') # => 'hi'
    

    Hope this will help someone!

提交回复
热议问题