我正在为我的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
模拟'重置'功能,所以它什么都不做。 –