django - 如何在 Django 中使用 Mock 测试 Twitter API

标签 django mocking twython

我最近刚刚开始使用 Django 作为我工作的一部分。我对它完全陌生,我在学习 django 的同时正在做一个实践项目。

我要求用户在搜索栏中输入短语或单词,然后我从 Twitter 返回 50 个在状态消息中包含这些单词的结果。该代码运行良好,我已经对其进行了一些单元测试。现在我想测试我正在使用的 twitter API(Twython),我发现我可以使用 Mock 或 patch 来完成它,但我无法理解如何去做。我读过一些关于 Mocking 的文档,但不太理解。

这是我的代码片段

定义搜索(请求):

searches = []
query = ""
if request.method == "POST":
    twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
    query = request.POST.get('q', '')
    search_results = twitter.search(q=query, count=50)

    for tweet in search_results['statuses']:
        tweets = "Date : %s,\n Tweet : %s" % (tweet['created_at'], tweet['text'])
        searches.append(tweets)

return render(request, "search.html", {
    "results": searches,
    "query1": query
})

有人可以建议我如何使用模拟测试这一行:

search_results = twitter.search(q=query, count=50)

最佳答案

听起来您在问“如何修补 Twython 以使 twitter.search(...) 返回我指定和/或检查的列表它被称为什么”?

如果是这种情况,您可以使用模拟修补测试中的 Twython 类,然后对其进行断言。像这样的东西:

with patch("yourapp.views.view_module.Twython") as twython_mock:
    twython_mock.return_value.search.return_value = {} # What you want to set the search call to return
    # Call your view function

twython_mock.assert_called_with(...) # If you want to check what was called in line 4
twython_mock.return_value.search.assert_called_with(...) # If you want to check what q and count are

关于django - 如何在 Django 中使用 Mock 测试 Twitter API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305377/

相关文章:

python - django-rest 框架序列化器关系作为字典而不是数组

PHPUnit:如何测试方法的调用顺序不正确?

python - 脚本卡在 try- except block 中

python - 我无法让 Twython 更新我的 Twitter 状态

django 数据库迁移失败,postgres

mysql - Django:空日期字符串应该返回全部

mysql - Django 应用程序上的 SQL 注入(inject)

python - 在 python 类的任何实例上模拟方法

java - 在 Spring 中进行 Junit 测试自定义过滤器

python - 维护一个包含与给定标签匹配的推文的 mongodb