Python单元测试:如何模拟多参数调用同一方法返回不同值
实现按入参返回对应mock值的方法
完全可以通过patch方式实现该需求,核心是使用side_effect属性而非固定的return_value:side_effect支持传入可调用对象,每次被mock的方法被调用时,会将调用时传入的参数交给这个可调用对象处理,返回值就作为本次mock调用的返回结果,刚好匹配你需要的「根据入参返回对应预设值」的需求。
修改后的可运行代码示例如下:
my_test_dict = {'filename1': 3, 'filename2': 30, 'filename3': None} with mock.patch.object(project, 'count_paras') as mock_count: # 用side_effect指定处理逻辑,根据入参匹配返回值 mock_count.side_effect = lambda file_name: my_test_dict[file_name] project.process_files(my_test_dict.keys()) # 后续可添加断言验证逻辑是否符合预期 # 示例1:验证有效文件计数为2(filename3返回None不计入) assert project.n_valid_files == 2 # 示例2:验证count_paras的调用次数、参数符合预期 assert mock_count.call_count == 3 mock_count.assert_any_call('filename1') mock_count.assert_any_call('filename2') mock_count.assert_any_call('filename3')
如果测试场景中可能出现my_test_dict不存在的key,也可以把lambda替换为更完善的处理函数,不存在时返回默认值或抛出异常,方便排查测试用例问题。
内容的提问来源于stack exchange,提问作者mike rodent
相关产品推荐
相关产品推荐

