2017-10-16 7 views
0

モックだけが使用できます。 ディープモック(交換方法付き)

#tested.py 
from somemodule import somelogger 

class MyClass(object): 
    def __init__(self): 
     self.logger = somelogger() 

    def do_smth(self): 
     self.logger.log(message) 

重要詳細:モジュールsomemoduleが存在しない、@patchのようなので、通常のソリューションスイートはありません。私はこれを行う方法としてunittest.mock.patchメソッドを使用することだと思う

some_message 

答えて

0

:コンソールで

#tests.py 
from tested import MyClass 


def test_logging(): 
    obj = MyClass() 
    obj.do_smth('some_message') 

:私はそれにsomemodulesomelogger's方法logを模擬する必要が

は簡易印刷を行い、 https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch

あなたのtests.pyファイルで、擬似ログメトを作成しますdを押して印刷します。

# tests.py 
from tested import MyClass 
from unittest.mock import patch 

def mocked_log(log_msg): 
    print(log_msg) 

@patch('tested.somelogger.log') 
def test_logging(mock_logger) 
    mock_logger.return_value = mocked_log 

    obj = MyClass() 
    obj.do_smth('some message') 
+0

この例を試してみましたか?どのようなPythonのバージョンですか? – sann05

+0

これはPython 3.6用です。私はもっ​​と複雑なシステムでも同様の模倣を行い、すべてうまくいった。 2.7.xを使用している場合、まずモックをインストールし、unittest.mockではなくmockをインポートする必要があります。 – suripoori

+0

申し訳ありませんが、私は一つの決定的な詳細を欠場しました:モジュールのモジュールモジュール**はありません** ** ** ** ** **存在している**。だから私たちがインポートしようとすると、私たちは常にImportErrorを取得します:No module ** somemodule ** – sann05

関連する問題