2017-03-03 21 views
2

Web開発フレームワークにDjangoを使用しています。そして今、私はunittestを書いています。テストコードで関数が実行されていないことをどのようにアサーションすることができますか?Python unittestで関数が実行されていないことをアサートする

例えば、これは、ユースケースです。私のテストコードは、ユーザーに署名しながら、間違ったパスワードを入力しているをテストして私は、パスワードリセット機能は、このユースケースで実行されていないことを確認します。

これは実際の状況を反映しているわけではありませんが、私があなたの意見を得ることを願っています。

+0

def function_can_not_be_called(): pass def func(call): if call: function_can_not_be_called() 

テストコード: あなたがmymodule.pyで定義する機能と仮定する。テストの前後でその値をテストする - それが違うなら、それは呼ばれた。もしそれが同じではないなら、私は思いついたことの回避策のタイプではありません。 – Cribber

+0

モック 'リセット'関数は何もしません。 –

答えて

1

私は自分の質問にお答えしたいと思います。今のところ私の解決策はMock.callです。例パスワードリセット機能があります場所です:utils/password.py

class Password(object): 

    def reset(self): 
     ... 

だから私は私のテストコードtest/login.py

@patch('utils.password.Password.reset') 
def test_wrong_password(self, mocked_password_reset): 
    ... 
    assert mocked_password_reset.called == False 
0

これを行うにはmock.patch.objectassert_not_calledまたはcall_countを使用する時に、このオブジェクトをモックする必要があります。関数(例えば、関数の実行ごとに、それが1だけインクリメントされる)にグローバルカウンタを追加約test_mymodule.py方法

import mymodule 
import unittest 
from mock import patch 

class CTest(unittest.TestCase): 

    @patch.object(mymodule, "function_can_not_be_called") 
    def test_MockFunc(self, mock_func): 
     mymodule.func(0) 
     mock_func.assert_not_called() 

     mymodule.func(1) 
     mock_func.assert_called_once() 

if __name__ == "__main__": 
    unittest.main() 
関連する問題