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

求推荐可跟踪Python方法与函数调用的类Mock功能库

推荐Python方法调用跟踪库

mockito-python

这是一款成熟的模拟库,其间谍(spy)功能完美匹配你的需求:既能保留原方法的真实执行逻辑,又能跟踪调用次数、调用状态等信息。

贴合你需求的用法示例

from mockito import spy2, verify

class MyClass:
    def not_called(self):
        print("This is not called")
    def first_method(self):
        print("First is called")
    def second_method(self):
        print("Second is called")

# 对实例进行间谍包装,跟踪所有方法调用
mc = MyClass()
spy2(mc)

# 执行目标调用
mc.first_method()
mc.second_method()
mc.second_method()

# 验证调用情况,完全符合你的期望逻辑
verify(mc, times=0).not_called()  # 未被调用
verify(mc, times=1).first_method()  # 调用1次
verify(mc, times=2).second_method()  # 调用2次

如果偏好装饰类的风格,也可以直接包装类:

from mockito import spy

# 装饰类,后续创建的所有实例都会被自动跟踪
spy(MyClass)
mc = MyClass()

# 执行调用后,验证逻辑和上述一致
mc.first_method()
verify(mc, times=1).first_method()

flexmock

轻量级模拟库,语法简洁灵活,同样支持真实方法的调用跟踪:

使用示例

from flexmock import flexmock

class MyClass:
    def not_called(self):
        print("This is not called")
    def first_method(self):
        print("First is called")
    def second_method(self):
        print("Second is called")

# 创建带跟踪能力的实例
mc = flexmock(MyClass())
# 声明需要跟踪的方法(默认会保留原方法逻辑)
mc.should_call("first_method")
mc.should_call("second_method")

# 执行调用
mc.first_method()
mc.second_method()
mc.second_method()

# 直接通过调用次数断言
assert mc.calls_to("not_called") == 0
assert mc.calls_to("first_method") == 1
assert mc.calls_to("second_method") == 2

补充

如果需要完全复刻你示例中MagicProxyLib的装饰器绑定风格,可以基于上述库的spy功能快速封装,但这两个库已经能直接满足核心需求,无需重复实现底层跟踪逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:45:39