나는 장식을 통해 연결된 signal_handler 같은 뭔가를이 하나의 매우 간단한 :어떻게 장고 시그널 핸들러를 조롱합니까?
@receiver(post_save, sender=User,
dispatch_uid='myfile.signal_handler_post_save_user')
def signal_handler_post_save_user(sender, *args, **kwargs):
# do stuff
내가 뭘 원하는 것은 그것에게 시험의 모의 라이브러리 http://www.voidspace.org.uk/python/mock/와 을 조롱하는이, 얼마나 많은 시간을 확인 장고가 그것을 부릅니다. 순간 내 코드는 뭔가 같은 :
def test_cache():
with mock.patch('myapp.myfile.signal_handler_post_save_user') as mocked_handler:
# do stuff that will call the post_save of User
self.assert_equal(mocked_handler.call_count, 1)
여기서 문제는 조롱 경우 원래의 신호 처리기가 @receiver
장식이 어딘가에 신호 처리기의 사본을 저장하기 때문에 가장 가능성도라는 것을, 그래서 ' 잘못된 코드를 조롱 했어.
그래서 질문 : 신호 처리기를 모의 테스트하여 어떻게 작동합니까?
def _support_function(*args, **kwargs):
# do stuff
@receiver(post_save, sender=User,
dispatch_uid='myfile.signal_handler_post_save_user')
def signal_handler_post_save_user(sender, *args, **kwargs):
_support_function(*args, **kwargs)
내가 대신 _support_function
을 조롱 예상대로 모든 작품 : 나는 내 신호 처리기를 변경하면 것을
참고.
'assert_equal'은 ' assertEquals (...)'? –
사용중인 테스트 스위트에 따라 다릅니다. django는 기본적으로'unittest'를 사용하는데, 여러분이 말한 것처럼'assertEquals'를 가지고 있습니다; 저는 항상 '코'를 사용합니다. 제 의견으로는 여러 측면에서 우월합니다. 코에는 'assert_equal'이 있습니다. 프로덕션 코드에서 복사/붙여 넣기 한 대답을 쓰면 그 곳에서'assert_equal'을 보게됩니다. 난 장고 기본값을 존중하는 답변을 편집, 이것을 지적 해 주셔서 감사합니다 – StefanoP
감사합니다! 나는 또한 코를 사용하지만 깨닫지 못했다. assert_equal은 존재했다. –