我正在爲我的Web開發框架使用Django。現在我正在寫單元測試。我怎樣才能斷言一個函數沒有在我的測試代碼中執行?斷言在Python單元測試中不執行函數
例如,這是用例:我的測試代碼正在測試用戶在登錄時輸入了錯誤的密碼。我想確保在此用例中不執行重置密碼功能。
嗯,這並不真實反映真實情況,但我希望你明白我的觀點。
我正在爲我的Web開發框架使用Django。現在我正在寫單元測試。我怎樣才能斷言一個函數沒有在我的測試代碼中執行?斷言在Python單元測試中不執行函數
例如,這是用例:我的測試代碼正在測試用戶在登錄時輸入了錯誤的密碼。我想確保在此用例中不執行重置密碼功能。
嗯,這並不真實反映真實情況,但我希望你明白我的觀點。
我會做的是使用模擬。嘲笑該功能並斷言mock_function.call_count==0
。
你可以閱讀更多關於模擬這裏:
https://docs.python.org/3/library/unittest.mock.html
我想回答我的問題。到目前爲止,我的解決方案是使用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
使用嘲笑這個對象mock.patch.object
和assert_not_called
或call_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()
測試代碼有關添加全局計數器的功能(例如,用於該函數的每次執行它被加1)如何。在測試之前和之後測試它的值 - 如果它不同,它被稱爲;如果它的相同它不是[我想....的工作區類型的東西....) – Cribber
模擬'重置'功能,所以它什麼都不做。 –