【问题标题】:Mock same method with different return value用不同的返回值模拟相同的方法
【发布时间】:2020-05-22 17:26:05
【问题描述】:

我想根据传递的参数修补 get_age() 方法。

假设我有get_age.py,我多次使用相同的get_age() 方法。

get_age("Anna")
...
get_age("Ben")

然后在测试中我想做:

@patch('get_ages.get_age') <-- mock getting age of Ben
@patch('get_ages.get_age') <-- mock getting age of Anna
def test_get_ages(self, age_A, age_B):

如何根据传递的名称模拟相同的方法?谢谢!

【问题讨论】:

    标签: python-3.x python-unittest.mock


    【解决方案1】:

    这可以通过使用side_effect 到patch.object 的参数来调用一个函数来实现,该函数根据输入返回不同的结果。例如:

    def find_ages(*args):
        if args[0] == 'Anna':
            # Return Anna's data
            return 18
        elif args[0] == ' Ben':
            # Return Ben's data
            return 45
    
    @patch.object(get_ages, 'get_age', side_effect=find_ages)
    def test_get_ages(self, get_age):
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2018-08-02
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2018-10-06
      相关资源
      最近更新 更多