模拟和修补 class 方法并将其 return 值赋予另一个函数

Mock and patch class method and give its return value to another function

这是我的片段

module1.py
class Client:

def __init__(self):
    self.api_client = APIClient()

def get_resources(self):
    #this method gets some data
    #end returns list with dictionaries
    return [{k1:v1},{k2:v2} ...]

 module2
 config = {}
 
 def add_config(resource):
     #process the data pass by resource
     config[resource[k1]] = data

 def instantiate_config():
     for item in Client().get_resources()
         add_config(item)

所以我想用 pytest 测试这个 instantiate_config。这是我的尝试:

@patch('module1.Client.get_resources')
def test_instantiate_config(self, client_mock):

    dummy_data = {some_dummy_data}
    #it is a copy of the list, returned form Client().get_resources()

    client_mock.get_resources.returned_values = dummy_data
    instantiate_config()

    assert 'key1' in config #config is the same config from module2

但这给出了空的配置字典。我不知道这是否可能 - 模拟 Client().get_resources() 以赋予它相同的值并将该值作为参数自动传递给 add_config_func。如果不是,最好的测试方法是什么 instantiate_config function。不确定是否清楚,因为故事有点长

您的 mock 已经表示方法 get_resources,并且您在“returned_values”中有错字。更改为:client_mock.return_value = dummy_data