2012-04-18 10 views
2

Mockモジュールを使用するメソッドへの呼び出しのサブセットのみをモックしたいと思います。だから、メソッドへのすべての呼び出しのサブセットのみをモックする

fubar = Fubar() 
fubar.myMethod = Mock() 
funar.myMethod.return_value = [fubar.myMethod(), 'MyMOck', fubar.MyMethod] 

myMethod第一及び第三の時間readメソッドを呼び出しますが、2番目の呼び出しで、モックメソッドを呼び出します。私がこれをしたい理由は、競合状態をチェックすることです:中間のコールは、最初のコールより早く戻って、いくつかの問題を引き起こすはずです。少なくとも、私はそれをこのようにすることができることを願っています。

これは可能ですか?もしそうなら、どうですか?そうでない場合は、どうしてですか?これはmyMethodが引数をとらないことを前提としてい

fubar = Fubar() 
myMethod = fubar.myMethod # note instance fubar, resulting in a bound method. 
fubar.myMethod = lambda self, calls = [myMethod, (lambda: 'MyMock'), myMethod]: calls.pop()() 

:これはどのように

+0

_earth_にあなたがそれをしたいと思うのはなぜ?あなたがその方法をテストしているか、そうでないかのどちらかです。 – katrielalex

+0

@katrielalex:ありがとう。私はメインポストを編集しました。 – Sardathrion

答えて

1

。ラムダの本体に引数を渡すか、必要に応じて部分的にmyMethodを適用することができます。

あなたがプログラムでモックの呼び出しを選択したい場合は、リストの代わりに発電機を使用することができ、むしろpopよりnext

fubar.myMethod = lambda self, calls = iter([myMethod, (lambda: 'MyMock'), myMethod]): next(calls)() 
関連する問題