我有一个生成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
的逻辑
我已经尝试过此answer,但没有用。 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
?
答案 0 :(得分:1)
感谢state
的评论。我必须坚持使用 import React, { Component } from 'react';
import { Text, View } from 'react-native';
import { Subscribe } from 'unstated';
import LoginContainer from './containers/login-container';
export default class Login extends Component {
constructor(props){
super(props)
}
render() {
return (
<Subscribe to={[LoginContainer, AnotherContainer]}>
{(container, another) => (
<View>
<Text>{container.state.stepNumber}</Text>
</View>
})
</Subscribe>
);
}
}
。
Klaus D.
和module
import random
random.randint(0, 9)
以获得给定条件下的定义值。我的问题有点作弊。因为我要两个答案相同,但不是最后一个。import random
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(random.randint(0, 9))
if 0 == UserProfile.objects.filter(sms_token=tmp).count():
return tmp
else:
return rand_six()