2017-03-03 6 views
2

웹 개발 프레임 워크로 장고를 사용하고 있습니다. 그리고 지금 나는 unittest를 쓰고있다. 테스트 코드에서 함수가 실행되지 않는다고 어떻게 주장 할 수 있습니까?파이어 단위 테스트에서 함수가 실행되지 않는다고 가정합니다.

예 : 이것은 사용 사례입니다. 로그인하는 동안 사용자가 잘못된 암호를 입력하고 테스트 코드가 테스트 중입니다.이 사용 사례에서는 암호 재설정 기능이 실행되지 않도록하고 싶습니다.

글쎄, 이건 실제 상황을 반영하지 않지만 내 포인트를 얻길 바랍니다.

+0

의 방법 (예를 들어, 함수의 각 실행이 1 씩 증가) 함수에 글로벌 카운터를 추가하는 방법에 대해 : 는 mymodule.py에 정의 기능을 가정합니다. 시험 전후에 그 값을 시험한다. 만약 그것이 틀렸다면 불렀다. 그것도 같지 않으면 [해결할 수있는 일종의 ....] – Cribber

+0

모의'reset' 함수는 아무 것도하지 않습니다. –

답변

1

난 내 자신의 질문에 대답하고 싶습니다. 지금까지 내 솔루션은 Mock.call을 사용하고 있습니다. 리셋 암호 기능이 위치한 곳 예이다 : mock.patch.objectassert_not_called 또는 call_count이 작업을 수행 할 수

class Password(object): 

    def reset(self): 
     ... 

utils/password.py 그래서 난 내 테스트 코드 test/login.py

@patch('utils.password.Password.reset') 
def test_wrong_password(self, mocked_password_reset): 
    ... 
    assert mocked_password_reset.called == False 
0

사용에서이 객체를 조롱 할 필요가있다.

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()