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

如何用MagicMock绕过issubclass检查?

解决MagicMock实例无法通过issubclass断言的问题

问题原因

issubclass()要求第一个参数必须是类对象,但你用MagicMock(spec_set=B)创建的mock_B是B类的实例mock,本质是实例而非类,因此触发TypeError。

解决方案

如果你需要让issubclass(mock_B, A)断言通过,必须让mock对象模拟类本身,而非类的实例,有两种可行方式:

方式1:手动设置mock的继承关系

通过给MagicMock指定__bases__属性,明确它的父类:

from unittest.mock import MagicMock

class A:
    pass

class B(A):
    pass

# 创建模拟类的mock,指定父类为A
mock_B = MagicMock(spec_set=B, __bases__=(A,))
assert issubclass(mock_B, A)  # 断言通过

方式2:使用create_autospec自动继承类结构

create_autospec会自动保留原类的继承关系和结构,无需手动设置:

from unittest.mock import create_autospec

class A:
    pass

class B(A):
    pass

# 生成类的mock,自动继承B的继承关系
mock_B = create_autospec(B, spec_set=True)
assert issubclass(mock_B, A)  # 断言通过

补充说明

如果你实际需求是检查实例的类型(而非类的继承),应该使用isinstance而非issubclass,此时原代码的实例mock可以直接通过断言:

mock_B_instance = MagicMock(spec_set=B)
assert isinstance(mock_B_instance, A)  # 断言自动通过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:05:55