模拟和修补 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
这是我的片段
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