首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mox模拟一个名为by__init__的方法

使用mox模拟一个名为by__init__的方法
EN

Stack Overflow用户
提问于 2011-06-22 15:00:30
回答 2查看 2.3K关注 0票数 2

我想在由init方法调用的类中留出一个方法。

代码语言:javascript
复制
class MyClass(object):
  def __init__(self): 
    # Some initializer code here
    ...
    self.method_with_side_effects()

  def method_with_side_effects(self):
    ... # Load files, etc.

根据Mox文档,您可以通过实例化对象,然后使用StubOutWithMock方法来模拟方法。但在这种情况下,我不能这么做:

代码语言:javascript
复制
import mox
m = mox.Mox()
myobj = MyClass()
m.StubOutWithMock(myobj, "method_with_side_effects") # Too late!

还有其他方法可以消除这种方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-22 15:07:13

您能直接子类MyClass并重写method_with_side_effects吗?

票数 3
EN

Stack Overflow用户

发布于 2011-07-28 15:54:06

如果您只想对该方法进行存根处理,则可以使用“顽固”模块:

代码语言:javascript
复制
import stubout

s = stubout.StubOutForTesting()
s.Set(MyClass, 'method_with_side_effects', lambda self: None)

如果你真的想要模拟这个方法,那就更复杂了。您可以使用__new__()直接创建实例对象,以避免__init__()的副作用,并使用它记录预期的行为:

代码语言:javascript
复制
import mox

m = mox.Mox()
m.StubOutWithMock(MyClass, 'method_with_side_effects')

instance = MyClass.__new__(MyClass)
instance.method_with_side_effects().AndReturn(None)

m.ReplayAll()
MyClass()
m.VerifyAll()

如果您实际上不需要行为验证,那么使用存根代替模拟就不那么脆弱了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6442018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档