为Python函数添加可选参数后单元测试失败的原因问询
单元测试失败的可能原因
- 未给新增参数设置默认值,导致必传参数校验失败
Python的Optional仅为类型标注,仅表示参数的值可以是None或标注的类型,不会自动将参数变为可选。你当前的函数定义中new: Optional[dict]没有设置默认值,本质还是位置必传参数,所有原有调用该函数的代码都会因为传参数量不足抛出TypeError,直接触发单测失败。
如果要实现真正的可选参数,需要修改定义为new: Optional[dict] = None。 - 单测包含函数签名校验逻辑
部分项目的单元测试会通过inspect等模块校验核心函数的参数列表、参数名是否符合预期,你修改了函数签名后,这部分校验用例就会比对失败。 - 函数被作为固定签名的回调使用
如果该函数被传入其他需要固定参数数量的回调接口(比如事件回调、高阶函数参数),新增参数且未设置默认值时,回调触发时传参数量不匹配会抛出异常。 - 新增参数使用了可变默认值
如果你给new参数设置的默认值是{}这类可变对象,Python的可变默认值会在函数定义时初始化,多次调用会共享同一个对象,导致有状态依赖的单测执行结果不符合预期。 - 存在基于
*args的动态传参调用
如果代码中存在function(*args)这类动态传参的调用逻辑,且传入的args长度固定为3,新增参数无默认值时也会出现传参数量不足的问题。
内容的提问来源于stack exchange,提问作者Therobot
相关产品推荐
相关产品推荐

