Python中文
首页
教程
问答
标签
搜索
登录
注册
怎样在执行Django单元测试时禁用第三方API?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在尝试针对Django中运行针对第三方API的操作的代码构建一些单元测试。具体来说,我正在与MailChimp同步一些用户数据,并使用一个实现MailChimp API的库。在</p> <p>我有一个自定义类<code>MailChimpAPI</code>,它基本上是我所使用的Python库的一个精简包装器。以下是代码的一些相关部分:</p> <pre><code>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 ... </code></pre> <p>我删去了(…)实现业务逻辑等的大部分代码,但这里突出的一点是,我将<code>api</code>属性设置为<code>__init__()</code>中PyChimp(第三方库)的一个实例,并且对该库的所有实际调用都是在<code>_call()</code>函数中进行的。在</p> <p>我对单元测试有点陌生,所以我很难找到解决这个问题的最佳方法。我的一个想法是在类之外实例化PyChimp库并将其传递给构造函数。另一个想法是在测试中,我可以模拟<code>_call</code>方法,这样它就不会命中实际的库。在</p> <p>我面临的第一个问题是,显然,我不想针对实际的API执行任何测试代码。所以我试图找出最好的方法来“存根”或“模拟”那个API,这样在测试期间对它的调用不会真正执行。理想情况下,我希望在Django测试套件中运行所有测试时都能看到这个模拟API。例如,我正在探索在通过<code>post_save</code>信号创建用户帐户时,将用户同步到MailChimp的可能性。出于这个原因,我显然不希望在Django身份验证应用程序中运行的测试触发实际的API。在</p> <p>我希望Django有一些全局设置/拆卸钩子或信号,我可以处理,但似乎没有任何东西。在</p> <p>在测试过程中,有人对如何用一个假装的API干净地替换一个“live”API有什么建议吗?还是我完全错了?在</p> <p>我很有信心我能找到一个解决方案,但是如果有人愿意分享一些关于解决这类问题的“最佳”方法的智慧,那就太好了。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>最好的方法可能如您所建议的那样,在外部创建api对象并将其传递给构造函数。这将允许您轻松地替换api类进行测试。在</p> <p>您可以创建一个MockPyChimp类,它的方法与实际的PyChimp api相同。通过这种方式,您可以轻松地在测试中重用相同的模拟类。在</p> <p>我对python/django单元测试不太熟悉,因此无法建议任何特定的库来帮助实现这一点,但我假设存在某种模拟库或类似的库。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
将Pandas数据帧转换为PyTorch张量?
7 回答
将Pandas数据帧转换为scipy稀疏矩阵
3 回答
将Pandas数据帧转换为Spark Datafram时出现问题
1 回答
将pandas数据帧转换为spark DataFram时出错
2 回答
将Pandas数据帧转换为spark datafram时收到错误
9 回答
将Pandas数据帧转换为Spark数据帧
9 回答
将Pandas数据帧转换为Tensorflow数据
8 回答
将Pandas数据帧转换为tkinter obj
8 回答
将pandas数据帧转换为XML
9 回答
将Pandas数据帧转换为值sql语句
4 回答
将pandas数据帧转换为元组
2 回答
将pandas数据帧转换为元组列表
4 回答
将pandas数据帧转换为元组列表并删除所有pandas数据类型
9 回答
将pandas数据帧转换为具有头和数据类型的numpy数组
6 回答
将pandas数据帧转换为内存中的拼花地板,并将其加载到Python中的Hadoop中
6 回答
将pandas数据帧转换为内存中类似文件的对象?
1 回答
将Pandas数据帧转换为内存功能(&F)
3 回答
将pandas数据帧转换为列表列表
4 回答
将pandas数据帧转换为列表列表以输入到RNN
4 回答
将Pandas数据帧转换为单行DataFram
10 回答