使用不同的 return 值模拟相同的方法

Mock same method with different return value

我想根据传递的参数修补 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):

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

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

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):