You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python单元测试:对象相等与值相等的测试时机及代码验证

你的直觉是对的,这里用对象相等断言更合适

先看你的代码场景:do_something的逻辑非常明确——接收参数后,直接返回helpers.help_do_something的返回值,没有任何额外处理。这种情况下用assertIs(断言对象身份相等)完全正确,原因很简单:你要验证的是函数没有对依赖的返回值做任何修改或包装,原封不动地返回了同一个对象。如果换成assertEqual(值相等),就算哪天有人给do_something加了类似return copy.deepcopy(helpers.help_do_something(some_arg))的代码,只要值没变测试就会通过,但这其实违背了原函数的设计意图。

单元测试中对象相等与值相等的适用场景

用对象相等(assertIs)的场景

  • 验证函数/方法返回的是同一个内存对象:比如你的转发逻辑、单例模式的实例一致性、缓存返回的对象复用;
  • 确认变量指向某个特定的全局/预定义对象:比如测试函数是否返回了None(assertIs(ret, None)比assertEqual(ret, None)更严谨)、或者某个全局配置实例;
  • 测试引用传递的逻辑:比如函数接收一个对象,处理后返回的是同一个对象而非新生成的副本。

用值相等(assertEqual)的场景

  • 只关心数据内容,不关心对象身份:比如返回数字、字符串、列表等基础类型,或者自定义业务对象只要属性值一致就符合要求;
  • 依赖的返回值是动态生成的新对象:比如每次调用依赖函数都会生成新实例,只要实例的属性/值符合预期即可;
  • 测试业务逻辑的输出结果:比如计算结果、格式化后的文本、数据库查询返回的数据集等,核心是结果内容正确,而非对象是否为同一个。

内容的提问来源于stack exchange,提问作者aydow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:24:22