2011-06-22 7 views
1

メソッドで呼び出されるクラスで1つのメソッドをスタブアウトしたいと思います。mboxを使ってby__init__というメソッドをモックします

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メソッドを使用してメソッドをモックすることができます。しかしこの場合、私はそれをすることができません:

import mox 
m = mox.Mox() 
myobj = MyClass() 
m.StubOutWithMock(myobj, "method_with_side_effects") # Too late! 

この方法をスタブアウトする方法はありますか?

答えて

3

MyClassを直接サブクラス化してmethod_with_side_effectsを上書きできますか?あなたが実際にメソッドをモックとしたい場合、それはより複雑だ、

import stubout 

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

:あなたが唯一のメソッドを消したい場合は

1

は、あなたがSTUBOUTモジュールを使用することができます。ずっとある代わりにモックのスタブを使用して、

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() 

あなたが実際に動作検証を必要としない場合:あなたは__init__()から副作用を避けるために__new__()と直接インスタンスオブジェクトを作成し、期待される行動を記録するためにそれを使用することができます壊れにくい。

関連する問題