我在理解mock如何工作以及如何用mock对象编写单元测试时遇到了问题。我想模拟一个外部api调用,这样我就可以为这些函数和使用这些调用的函数编写单元测试。在
起初我试图模拟check_sms_请求,后来我需要用它来覆盖对象的check_delivery_状态。在
如何为这种情况编写测试?在
要模仿的函数
def check_sms_request(remote_id, phone):
if not can_sms(phone):
return None
client = Client(settings.SMS_API_URL)
base_kwargs = {
'phone': phone,
'remoteId': remote_id,
}
request = client.service.CheckSmsRequest(settings.SMS_API_LOGIN, settings.SMS_API_PASSWORD, base_kwargs)
return request
class SMS(models.Model):
sms_response = models.IntegerField(choices=SMS_SEND_STATUS, null=True, blank=True)
delivery_status = models.IntegerField(choices=DELIVERY_STATUS_CHOICES, null=True, blank=True)
has_final_status = models.BooleanField(default=False)
def check_delivery_status(self):
if not self.has_final_status:
response_status = check_sms_request(self.id, self.phone)
if response_status is not None:
self.history.create(fbs_status=self.sms_response, delivery_status=response_status.response)
if response_status is not None and response_status.response in FINAL_STATUSES:
self.has_final_status = True
if response_status is not None:
self.delivery_status = response_status.response
self.save()
return self.delivery_status
我的测试:
^{pr2}$
型号:
测试:
^{pr2}$您可以对测试函数进行monkey-patch,如下所示:
相关问题 更多 >
编程相关推荐