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

为何Django模型测试中assertIsInstance失败而assertIs成功?

为什么assertIsInstance测试失败但assertIs能通过?

你遇到的这个问题核心是对两个断言方法的作用理解偏差,咱们结合你的代码来拆解:

先搞懂两个断言的本质区别

  • assertIsInstance(a, b):它的作用是检查*a是b类(或b子类)的实例对象*。简单说,a得是用b类创建出来的具体对象,而b是类本身。
  • assertIs(a, b):它的作用是检查*a和b是同一个对象*(内存地址完全一致),不管类型,只要是同一个实体就会通过。

结合你的代码分析

你的get_django_model函数返回的是模型类本身(比如models.Foo这个类对象),而不是这个类的实例(比如Foo.objects.create()生成的具体数据对象)。

当你写self.assertIsInstance(model_class, models.Foo)时,你其实在问:「models.Foo这个类,是不是models.Foo类的实例?」——这显然不成立,因为类的实例是它创建出来的对象,而类本身的类型是type(Python里所有类都是type的实例)。

而self.assertIs(model_class, models.Foo)是在问:「函数返回的类,和models.Foo是不是同一个类对象?」这刚好匹配你的函数逻辑(函数就是要返回对应模型类),所以测试直接通过了。

额外小验证

如果想验证返回的确实是一个类,你可以写:

self.assertIsInstance(model_class, type)

这会通过,因为Python里所有类都是type的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:17