2017-03-03 105 views
2

我正在爲我的Web開發框架使用Django。現在我正在寫單元測試。我怎樣才能斷言一個函數沒有在我的測試代碼中執行?斷言在Python單元測試中不執行函數

例如,這是用例:我的測試代碼正在測試用戶在登錄時輸入了錯誤的密碼。我想確保在此用例中不執行重置密碼功能。

嗯,這並不真實反映真實情況,但我希望你明白我的觀點。

+0

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

測試代碼有關添加全局計數器的功能(例如,用於該函數的每次執行它被加1)如何。在測試之前和之後測試它的值 - 如果它不同,它被稱爲;如果它的相同它不是[我想....的工作區類型的東西....) – 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_calledcall_count做到這一點。 假設你功能定義在mymodule.py:在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()