2

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

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

1 回目と 3 回目は read メソッドを呼び出しますmyMethodが、2 回目の呼び出しではモックされたメソッドを呼び出します。これを行う理由は、競合状態をチェックするためです。中間の呼び出しは最初の呼び出しよりも早く返されるため、いくつかの問題が発生します。少なくとも、私はこのようにできることを願っています。

これは可能ですか?もしそうなら、どのように?そうでない場合、なぜですか?

4

1 に答える 1

1

これはどう:

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

myMethodこれは、が引数を取らないことを前提としています。必要に応じて、ラムダの本体で引数を渡すか、部分的に適用できますmyMethod

モックへの呼び出しをプログラムで選択したい場合は、リストの代わりにジェネレーターを使用できnextますpop

fubar.myMethod = lambda self, calls = iter([myMethod, (lambda: 'MyMock'), myMethod]): next(calls)()
于 2012-04-18T15:48:14.690 に答える