我正在使用Django作为我的Web开发框架。现在我正在编写单元测试。如何断言我的测试代码中没有执行某个函数?
例如,这是用例:
嗯,这并不能真实反映真实情况,但我希望你明白我的意思。
答案 0 :(得分:6)
我要做的是使用mock。模拟函数并断言mock_function.call_count==0
。
你可以在这里阅读更多关于模拟的内容:
https://docs.python.org/3/library/unittest.mock.html
答案 1 :(得分: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
答案 2 :(得分:0)
使用mock.patch.object
和assert_not_called
或call_count
来执行此操作。
假设你在mymodule.py
中定义函数:
def function_can_not_be_called():
pass
def func(call):
if call:
function_can_not_be_called()
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()