2017-03-03 70 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()