[英]How to unit test nested for loop function in Python
我正在尝试使用 Python 中的 Mock 模块对带有嵌套 for 循环的 function 进行单元测试:
主要.py:
@dataclass
Helper_class():
Attr1: Set[some_object]
Attr2: Set[str]
def fetch_rule_for(api, id):
return some rule_objects based on id
def my_func(list_ids):
api = create some api connection
result_dict = dict()
for id in list_ids:
Attr1_set = set()
Attr2_set = set()
for rule in fetch_rule_for(api, id):
if any(a.name == 'some_action_name' for a in rule.actions):
Attr2_set.add(rule.attr1)
Attr1_set.add(rule)
result_dict[id] = Helper_class(Attr1_set, Attr2_set)
return result_dict
规则是带有方法动作的 class object,动作是另一个带有属性名称的 class object。
我正在努力解决的两个问题:
(1) 如果返回的是一个复杂的 class object,我如何处理 function fetch_rule_for(api, id) 的返回值?
(2) 如何使用单元测试处理 Python 中的 for 循环? 我已经看到提到了 mock.call_count,但有人可以了解更多细节或向我指出相关资源吗?
我是 Python 单元测试的新手,所以非常感谢任何帮助!
如果要修补 class 的返回值,只需实例化 class 并手动设置任何必要的 class 变量,那么只需使用configure_mock(return_value=class_object)
以下是 requests.Response 的示例:
resp = Response()
resp.status_code = 200
resp._content = json.dumps({'token': 'xyz123'})
mock_post.configure_mock(return_value=resp)
在 for 循环的情况下,您可能希望使用side_effect
模拟包含在其中的任何返回
@mock.patch('your_class.fetch_rule_for', side_effect=iter([1,2,3]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.