Python单元测试中如何忽略断言时列表参数的顺序
解决Python单元测试中忽略列表参数顺序的断言问题
要实现忽略列表参数顺序的断言,你可以通过以下两种常用方式处理:
方法一:提取调用参数后排序比较
先确认函数被调用一次,再取出传入的参数,将其与目标列表分别排序后对比。这种方法适合元素可哈希的场景,即使有重复元素也能正确匹配:
func_mocker = mocker.patch("func_to_call") # 执行触发func_to_call调用的测试逻辑 func_mocker.assert_called_once() # 先确保调用次数正确 args, kwargs = func_mocker.call_args assert sorted(args[0]) == sorted([1, 2, 3])
方法二:使用assertCountEqual断言
如果列表中包含不可哈希元素(比如嵌套列表),或者需要严格校验元素出现的次数,推荐使用unittest的assertCountEqual方法。它会忽略元素顺序,同时检查元素的数量是否一致:
import unittest func_mocker = mocker.patch("func_to_call") # 执行测试逻辑 func_mocker.assert_called_once() args, kwargs = func_mocker.call_args unittest.TestCase().assertCountEqual(args[0], [1, 2, 3])
这两种方式都能让传入[3,2,1]时断言通过,同时保证参数的元素和数量符合预期。
内容的提问来源于stack exchange,提问作者XXXHHHH
相关产品推荐
相关产品推荐

