2017-05-17 13 views
1

関数内でオブジェクトへの複数の呼び出し(たとえば、サブプロセス呼び出し)がある場合、特定のサブプロセス呼び出しを疑似できるかどうかを確認します。目標は、ユニットテストのために操作する特定のロジックケースを特定することです。あるいは、これは嘲笑(またはSDET能力)の単なる限界であり、より大きな機能を小さなものに分割して、1つのサブプロセス呼び出ししか含まず、それぞれを嘲笑してユニットテストを個別に行うことができるようにする必要がありますか?Python Mock:関数内の特定のポイントにオブジェクトを挿入する方法は?

答えて

1

私はそれが可能かどうかわかりませんが、元の方法で行ったことは何でもできます。私は3個の呼び出しの合計のうち、barにのみ2回目の呼び出しを嘲笑している例として

import mock, sys 


def bar(n): 
    print('bar({})'.format(n)) 


def foo(): 
    bar(1) 
    bar(2) 
    bar(3) 


class MockBar(mock.MagicMock): 

    original = staticmethod(bar) 

    def __call__(self, *args, **kwargs): 
     if self.call_count == 1: 
      print('stubbed a call with args {} and kwargs {}'.format(args, kwargs)) 
     else: 
      MockBar.original(*args, **kwargs) 
     super(MockBar, self).__call__(*args, **kwargs) 


with mock.patch.object(sys.modules[__name__], 'bar', MockBar()): 
    foo() 

。上のコードを実行すると、出力が得られます。

bar(1) 
stubbed a call with args (2,) and kwargs {} 
bar(3) 
関連する問題