我刚刚开始使用Django作为我工作的一部分。我对它很陌生,在学习django时我正在做一个练习项目。
我要求用户在搜索栏中输入短语或单词,然后我从twitter返回50个结果,这些结果在状态消息中包含这些单词。代码工作正常,我已经对它进行了一些单元测试。现在我想测试我正在使用的twitter API(Twython),我发现我可以使用Mock或补丁来完成它,但我无法理解如何去做。我已经阅读了几篇关于模拟的文档,但却无法理解它。
以下是我的代码片段
def搜索(请求):
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
})
有人可以建议我如何使用mock测试这一行:
search_results = twitter.search(q=query, count=50)
答案 0 :(得分:2)
听起来你问“我如何修补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