Python get_account_value函数返回条件未按预期运行修复方法
问题说明
现有函数用于根据传入的标签字典为AWS实例添加附加标签,预期运行逻辑如下:
- 当传入的客户ID(
customer_id)数量大于1时,函数返回shared - 标签无Account字段、或Account字段值与传入客户ID一致时,返回传入的客户ID
- 标签Account字段值与传入客户ID不一致时,返回
shared
当前运行异常:单元测试传入包含2个元素的客户ID列表时,函数直接返回了该列表,未按预期返回shared,触发断言失败。
相关代码与报错
原业务函数
def get_account_value(tags, customer_id): if not tags: return customer_id tag_value = tags.get("Account") return customer_id if not tag_value or tag_value == customer_id else "shared"
对应单元测试
def test_get_account_value_customer_list(): TAGS_NO_VALUE = {'foo':'bar'} TEST_CUSTOMER_ID_LIST = ["test_customer_id1", "test_customer_id2"] response = tagging.get_account_value(TAGS_NO_VALUE, TEST_CUSTOMER_ID_LIST) assert response == "shared"
单元测试报错信息
AssertionError: assert ['test_client_id1', 'test_client_id2'] == 'shared'
根因分析
原函数逻辑缺失了对customer_id参数本身的多值判断:测试用例中传入的标签字典没有Account键,tag_value取到None,触发not tag_value的判断条件,直接将传入的列表类型customer_id返回,完全没有处理多客户ID的场景。
修复方案
在函数入口增加多客户ID的判断逻辑,只要传入的customer_id是长度大于1的列表,直接返回shared,修复后代码如下:
def get_account_value(tags, customer_id): # 多客户ID场景直接返回shared if isinstance(customer_id, list) and len(customer_id) > 1: return "shared" if not tags: return customer_id tag_value = tags.get("Account") return customer_id if not tag_value or tag_value == customer_id else "shared"
修复后重新执行单元测试,函数会命中入口的多值判断逻辑返回shared,断言可以正常通过。
内容的提问来源于stack exchange,提问作者ambertaka
相关产品推荐
相关产品推荐

