2017-10-24 9 views
1

私は正常に機能を模擬することができます。私は元のものが呼び出されていないと確信しています。元の関数に巨大なprint文を追加しました。私が嘲笑したとき、このprintは呼び出されません。モックを再びオンにすると、printステートメントは呼び出されません。Python Mocking assert_called not working

しかし、私のassert_calledは呼び出されていないと言っても失敗しています。誰もこれのようなことを経験したことがありますか?

class FooTestCase(unittest.TestCase): 

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

     my_obj = MyObj() 

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

     mock_hf.helper_function.assert_called() 

     return 

マイエラー応答

AssertionError: Expected 'helper_function' to have been called. 

更新 私はちょうどアサーションの前に

print mock_cw.method_calls 
    print mock_cw.mock_calls 

method_callsを次の行を追加mock_callsが持つリストである一方で、空のリストです1の商品は

0123です

まだアサートが失敗します

+0

にする必要がアサートライン)(My_Obj.helper_functionを呼び出す)(My_Obj.do_somethingていますか?あなたもそのコードのスニペットを置くことができますか? – suripoori

+0

はい、そうです。私はそのコメントに言及した。そのコードはかなりシンプルですが、それが役立つかどうかはわかりません。私が質問を更新するために何を確認してください。それは助けるかもしれません。 –

答えて

1

通常、このようなエラーは、正しい場所にパッチを当てていないために発生します。これをオブジェクト自体にパッチを適用しようとする:このmyobjテストファイルの先頭にインポート(とする)されているので

@patch.object(MyObj, "helper_function") 
def test_simple(mock_hf): 
    ... 

、これは直接そのオブジェクトのメソッドをパッチ。

+0

通常、パッチ関連の問題の正解ではありますが、アサート方法を呼び出す方法に問題がありました –

+0

ああ私はそれを行うでしょう! –

2

mock_hf.helper_functionが呼び出されたかどうかを確認していましたが、mock_hfは既にhelper_functionにマップされています。私は多かれ少なかれ、helper_functionではなく、helper_function.helper_functionが呼び出されたことを確認していました。

mock_hf.assert_called()