python – 如何在执行Django单元测试时禁用第三方API?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何在执行Django单元测试时禁用第三方API?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2058字,纯文字阅读大概需要3分钟。
内容图文
![python – 如何在执行Django单元测试时禁用第三方API?](/upload/InfoBanner/zyjiaocheng/769/131596b6af3d4d3baed7522c9e6bb3d6.jpg)
我正在尝试针对Django中的某些代码构建一些单元测试,这些代码运行针对第三方API的操作.具体来说,我正在使用MailChimp同步一些用户数据并使用实现MailChimp API的库.
我有一个自定义类MailChimpAPI,它本质上充当我正在使用的Python库的瘦包装器.以下是代码的一些相关部分:
class MailChimpAPI(object):
"""
A wrapper for implementing business logic and exception handling around
the PyChimp API
"""
...
def __init__(self, api_key, primary_list_id, merge_keys, use_secure=True, timeout=None):
...
# setup api
self.api_key = api_key
self.api = PyChimp(self.api_key)
...
...
def _call(self, method_name, args=[], kwargs={}):
"""Calls the PyChimp API directly"""
result = getattr(self.api, method_name)(*args, **kwargs)
if self.api.errorCode:
self._raise_mailchimp_exception()
else:
return result
...
我剪掉了(…)实现业务逻辑等的大多数代码,但这里的突出方面是我将api属性设置为__init __()中的PyChimp(第三方库)实例,以及所有对该库的实际调用是在_call()函数中进行的.
我对单元测试有些新意,所以我很难找到解决这个问题的最佳方法.我的一个想法是在我的类之外实例化PyChimp库并将其传递给构造函数.另一个想法是测试这个我可以模拟_call方法,以便它不会碰到实际的库.
我遇到的首要问题是,显然,我不想针对实际的API执行任何测试代码.因此,我试图找出“存根”或“模拟”该API的最佳方法,以便在测试期间对其进行的调用实际上不会执行.理想情况下,我希望在Django测试套件中运行所有测试时都存在该模拟API.例如,每当通过post_save信号创建用户帐户时,我正在探索将用户同步到MailChimp的可能性.出于这个原因,我显然不希望在Django身份验证应用程序中运行的测试也触发实际的API.
我希望Django有一些全局设置/拆卸挂钩或我可以使用的信号,但似乎没有任何东西.
有没有人对如何在测试过程中用假装一个干净地替换“实时”API有任何建议?或者我完全错了吗?
我非常有信心我可以通过自己的方式找到解决方案,但如果有人能够分享一些关于采用这种方式的“最佳”方式的智慧,那将会很棒.
解决方法:
最好的方法可能是你建议的,在外面创建api对象并将其传递给构造函数.这将允许您轻松替换api类进行测试.
您可以创建一个MockPyChimp类,它具有与实际PyChimp api相同的方法.这样,您可以轻松地在测试中重用相同的模拟类.
我对python / django单元测试不够熟悉,能够建议任何特定的库来协助这个,但我会假设存在某种类似的模拟库.
内容总结
以上是互联网集市为您收集整理的python – 如何在执行Django单元测试时禁用第三方API?全部内容,希望文章能够帮你解决python – 如何在执行Django单元测试时禁用第三方API?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。