我有以下示例代码:
class AuxiliaryClass:
@staticmethod
def high_cost_method():
"Do something"
class MyTestedClass:
def do_something(self):
something = AuxiliaryClass.high_cost_method()
"do something else"
我想测试MyTestedClass
。为此,我创建了AuxiliaryClassStub
类来覆盖high_cost_method()
。我希望我的测试从do_something()
执行MyTestedClass
,但do_something()
应该使用存根而不是真正的类。
我怎么能这样做?
我真正的辅助类很大,它有很多方法,我会在很多测试中使用它,所以我不想修补单个方法。我需要在测试期间更换全班。
请注意,high_cost_method()
是静态的,因此在这种情况下,模仿__init__()
或__new__()
将无济于事。
答案 0 :(得分:0)
如果您在self.__class__.high_cost_method
内使用do_something
,是否有效?这样就可以避免直接引用类名,这应该启用子类化并使用AuxiliaryClass中的方法覆盖static方法。
class MyTestedClass:
def do_something(self):
something = self.__class__.high_cost_method()
something()
@staticmethod
def high_cost_method():
print("high cost MyTestedClass")
class AuxiliaryClass(MyTestedClass):
@staticmethod
def high_cost_method():
print("high cost AuxiliaryClass")
然后你得到
test = AuxiliaryClass()
test.high_cost_method()
高成本AuxiliaryClass
,否则
test = MyTestedClass()
test.high_cost_method()
高成本MyTestedClass