2017-08-25 5 views
1

私はモックで初心者です。私はmockモジュールを見て、特定のメソッドやモジュールをパッチデコレータでモックする方法を理解しました。モジュールをモックする方法はありますが、その中のすべてのメソッドをモックする方法はありませんか?

モジュール内の単一の方法を模擬するためには、それを行うための一つの方法は次のとおりです。

@mock.patch('module1.method1') 
def test_val(self, mock_method1): 
    mock_method1.return_value = "whatever_i_want" 

同じモジュール内の複数の方法を模擬するために、私はこれを行うことができます:

@mock.patch('module1.method2') 
@mock.patch('module1.method1') 
def test_val(self, mock_method1, mock_method2): 
    mock_method1.return_value = "whatever_i_want" 
    mock_method1.return_value = "whatever" 

私が望むのは、モジュール内のいくつかのメソッドを模擬し、他のメソッドをそのまま保つことです。モジュール全体を模擬すると、そのモジュール内のすべてのメソッドまたは属性がモックされます。

私は上記のように個別に複数のメソッドをモックするのではなく、特定のメソッドをun-mockedにしてモジュール全体をモックできますか?

+0

テストしているコードを投稿してください。テストで構成されたオブジェクトで直接テストを呼び出すことができるように、テストを再構成して、単一のメソッドまたはw/eをオーバーライドすることができます。あなたはオブジェクトを嘲笑にブラックリストのアプローチを探していますか? – dm03514

+0

@ dm03514申し訳ありませんが、コードを投稿できません。いいえ、私は白リストアプローチを探しています(いくつかのモジュールを除いてモジュール内のすべてのメソッドをモックする) –

答えて

1

テスト対象のクラスをサブクラス化し、コンストラクタ内のすべてのメソッドをモックアウトすることができます。テストの下では、モッククラスだけを使用し、実際のクラスは使用しません。

class MockSubClass(RealClass): 

    def __init__(self, *args, **kwargs): 
     self.method_to_mock1 = mock.create_autospec(RealClass, 'method_to_mock1', ...) 
     ... 

class TestRealClass(TestCase): 

    def setUp(self, *args, **kwargs): 
     self.object_to_test = MockSubClass(...) 
関連する問題