У меня есть функция для генерации sms_token
.Он не должен дублироваться с существующим в базе данных.Однако пространство токена может быть не таким большим, как могло бы произойти столкновение более нового.
Python 3.7.0
from random import randint
from multy_herr.user_profiles.models import UserProfile
def rand_six():
"""
Must find the `sms_token` which no `UserProfile`
:return:
"""
tmp = ""
for i in range(6):
tmp += str(randint(0, 9))
if 0 == UserProfile.objects.filter(sms_token=tmp).count():
return tmp
else:
return rand_six()
Поэтому я хочу сделать side_effect
из randint
чтобы вернуть мне детерминированные значения по этому порядку 123456, 123456, 111222
С заданными значениями.Я смогу проверить else
логику в моем rand_six
Я пробовал этот ответ , но не работает.rand_six()
все еще возвращает мне оригинальную функцию, а не ту, которую я сделал.
from unittest.mock import patch
from multy_herr.users.utils import rand_six
@patch('random.randint')
def test_rand_six(self, some_func):
"""
Suppose it generates the duplicated `sms_token`
:return:
"""
some_func.return_value = '123456'
assert '123456' == rand_six()
Проблема:
Она не исправляет поведение random.randint
Вопрос:
Как я могу поместить свой поддельный сгенерированный список в мой randint
?