求推荐可跟踪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
相关产品推荐
相关产品推荐

