我试图验证基地。运行这个以正确的顺序调用派生类的方法(派生方法_1;1st | 2nd | 3rd])。如输出所示,测试不起作用。我该怎么解决这个问题?在
class Base(object):
__metaclass__ = abc.ABCMeta
def __init__(self, parameters):
self.parameters = parameters;
@abc.abstractmethod
def must_implement_this(self):
return
def run_this(self):
self.must_implement_this()
if(self.parameters):
first = getattr(self, "derived_method_1st")
first()
second = getattr(self, "derived_method_2nd")
second()
third = getattr(self, "derived_method_3rd")
third()
class Derived(Base):
def must_implement_this(self):
pass
def derived_method_1st(self):
pass
def derived_method_2nd(self):
pass
def derived_method_3rd(self):
pass
mocked = MagicMock(wraps=Derived(True))
mocked.run_this()
mocked.assert_has_calls([call.derived_method_1st(), call.derived_method_2nd(), call.derived_method_3rd()])
wraps
与实例不兼容。这里发生的是mocked.run_this
返回一个新的mock对象,它“包装”Derived(True).run_this
,其中后者是绑定到原始Derived()
实例的绑定方法。在因此,该方法将调用绑定到原始实例而不是模拟的
self.derived_method_*
方法。在您可以在
spec
mock上修补run_this
方法:演示:
^{pr2}$相关问题 更多 >
编程相关推荐