0

私のテストファイルでは、モジュール内に含まれているヘルパー関数を模擬したいと思います。私は '正常に'(つまり、コンパイルやランタイムエラーはなく、すべてが適切にリンクされているので)機能をモックすることはできますが、モックは私がテストしているクラスに流されません。Pythonモック関数とインポートモック

私は依存性注入について検討しましたが、今のところ、1つの機能しか持たないモジュールを注入する方法が正確にはわかりません。最終的に私はほぼすべての機能を嘲笑する予定です。私はちょうど最初に働くベースラインを得たいです。ここで

がアサートコマンドが失敗し、メソッドが呼び出されなかったことを報告している私がこれまで持っているもの

class FooTestCase(unittest.TestCase): 

    @mock.patch('modules.MyHelperModule.helper_function') 
    def test_simple(self, mock_hf): 

     my_obj = MyObj() 

     # internally, this class imports HelperModule 
     # and the method calls helper_function with 1 
     my_obj.do_something() 

     mock_hf.helper_function.assert_called_with(1) 

     return 

です。私はモックがmy_objに決して通らないと仮定しています。

MyObjのinitメソッドでフラグを作成してtesting = Falseと同様にインポートすることができますが、テストファイルでのみ侮られたモジュールをどうやってインポートできますか?これは私が今考えているアプローチですが、私は同じ結果を得る他の実装にもオープンしています。ダニエル・ローズマンさんのコメントに応えて

、このmyobjで

は、私が

ImportError: No module named modules 

マイパッチラインが今のように見えるエラーを取得しています、

from modules.HelperModule import helper_function 

しかし次の行を持っています

@mock.patch('MyObj.modules.HelperModule.helper_function') 

どんな助けも常に高く評価されます。ありがとうございました!

+1

この記事を読む:[パッチを当てる](https://docs.python.org/3/library/unittest.mock.html#where-to-patch) –

+0

私自身の研究を続けると、私はちょうど同じ記事になった!ありがとうございました。あなたはドキュメントよりも詳細なバージョンを知っていますか? –

答えて

1

私は、問題は、mock_hfがパッチしたいものではないということだと思います。 で試してみてください。私のオリジナルのポストへのダニエル・ローズマンさんのコメントで述べたように

from unittest.mock import patch 
class FooTestCase(unittest.TestCase): 


def test_simple(self): 
    with patch('modules.MyHelperModule.helper_function') as mock_hf: 
     my_obj = MyObj() 
     my_obj.do_something() 
     mock_hf.assert_called_with(1) 
0

、問題は私がパッチ適用された場所とありました。

私はMyObj.helper_functionにパッチを当てていたはずです。さらに、 .pyでは、MyObjからaがMyObjをインポートしました。これは私のテストでMyObjクラスを参照できるようにしたが、ファイル全体に対してhelper_functionを上書きする必要があった。私はその行を削除しなければならなかった。

関連する問題