2013-10-10 53 views
2

我刚刚开始使用Django作为我工作的一部分。我对它完全陌生,在学习django的同时我正在开发一个练习项目。如何使用模拟来测试Django中的Twitter API

我要求用户在搜索栏中输入一个短语或一个单词,然后从状态消息中返回包含这些单词的twitter的50个结果。代码工作正常,我已经做了一些单元测试。现在我想测试我正在使用的twitter API(Twython),并且我发现我可以使用模拟或补丁来做到这一点,但我无法理解如何去做。我已经阅读了一些有关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) 

回答

1

这听起来就像你问“如何补丁Twythontwitter.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 
+0

谢谢丹,我会试试这么多,非常感谢你 – Arpit

相关问题