繁体   English   中英

如何在 Python 中对嵌套循环 function 进行单元测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM