单元测试中是否始终需要验证被测函数返回的特定值?
单元测试函数返回值的适用场景及场景案例解答
核心判断标准
你只需要判断你封装的函数是否存在「不属于第三方依赖的自有逻辑」、是否需要对外保证稳定的输出契约,符合以下任意一种场景就建议测试返回值,而非仅测试依赖调用:
- 函数内部包含你自定义的业务转换、参数处理、逻辑判断,这部分逻辑不属于第三方依赖的测试范围,必须通过返回值验证正确性
- 函数是对外暴露的公共工具方法,所有上层业务都依赖它的输出格式、取值范围等契约
- 依赖的第三方库存在API变动风险,需要快速感知版本升级带来的不兼容问题
- 函数的输出会直接影响核心业务流程,需要最高级别的正确性保障
针对你封装的weekdayWrapper场景的具体建议
你不需要编写复杂的用例去验证特定日期的返回值是否正确——比如不需要mock系统时间为某个固定日期,再验证返回的星期值是否和预期一致,这部分确实属于moment库本身的测试范围,重复测试没有意义。
但你可以加两个维护成本极低的返回值验证用例,性价比很高:
- 验证返回值为
number类型,符合你定义的输出类型契约 - 验证返回值在0-6的合理取值范围内
这两个用例可以帮你规避很多低级错误:比如你后续手滑把代码改成了return moment().weekday.toString()、或者moment大版本升级后修改了weekday()的返回类型/取值范围,只验证函数调用的用例完全发现不了这类问题,但是简单的返回值验证就能第一时间拦截。
如果你的这个方法只是内部临时使用、只有1-2处调用且后续会很快重构,那只测weekday是否被正确调用就足够了。但如果是放在公共工具库中给全项目使用,加这两个简单用例的收益远高于成本。
内容的提问来源于stack exchange,提问作者Jacob L
相关产品推荐
相关产品推荐

