在django视图测试

时间:2017-07-08 20:15:05

标签: python django unit-testing mocking

我有一个启动用户登录请求的视图功能

它看起来像这样:

def initiate_login(request):
    # get request parameters
    return check_user_and_send_otp(login_id)

然后,该请求由另一个函数处理

def check_user_and_send_otp(login_id):
    # check if user exits
    return send_otp_to_user(phone_number)

然后是另一个功能

def send_otp_to_user(phone_number):
    # sends a message to user
    return response

问题在于测试我的代码时,我不想在测试时向手机号码发送消息。

我的登录测试功能看起来有点像这样,是否可以在不更改代码的情况下进行模拟?

    def test_login_initiator(self):
    response = self.client.post(self.login_url, data=self.login_data, content_type="application/json", **self.headers)
    self.assertEqual(response.status_code, 200)
  

其他人调用的所有这些功能都位于单独的模块中

1 个答案:

答案 0 :(得分:0)

如果您不想在物理电话上实际收到消息,可以使用在线短信接收器。看看这个blog

此外,您还可以通过Way2sms等其他免费在线服务发送消息。你只需要谷歌了解它们。要在Python中执行此操作,您需要使用urllib2 / requests和beautifulsoup进行Web解析,这是一个全新的问题。

或者您可以通过简单地注释掉邮件发件人代码或从函数返回true来跳过此功能。

如果您想生活危险,请考虑制作一个配置文件,它可以帮助您创建判断是否执行某些操作的开关。