2017-11-20 2 views
1

私は基本的に魔法のモックとコンテキストマネージャを使って自分のコードをテストしています。私はget_urls関数をうまく模倣できましたが、私のaccess_all_repos_pr() PRの7日より新しいものは誰でもそのデータを模擬する方法について私に助けてくれるでしょう。ここでMagic Mockを使ってGithub Apiをテストする

)が(私のget_urlsのためのテストコードです:

import unittest 
from mock import MagicMock, patch 
from contextlib2 import ExitStack 
from GithubAPIpackage.GithubAPI import get_urls 


class Test_GithubApi(unittest.TestCase): 
    def test_get_urls_returns_valid_urls(self): 
     with ExitStack() as stack: 

      mock_get_urls = stack.enter_context(
       patch("GithubAPIpackage.GithubAPI._fetch_url") 
      ) 
      fake_data = {"current_user_repositories_url": "http://FAKEURL.com"} 
      mock_get_urls.return_value = fake_data 
      print(type(fake_data)) 

      result = get_urls() 
      self.assertEqual(result, "http://FAKEURL.com") 

私は誰もが、私はモックを作成するために、正確に何をする必要があるかで私を助けることができ、機能access_all_repo_prの応答をモックとしたいです私のaccess_all_repo_pr関数のために。何らかの方法でコードをリファクタリングする必要がありますか?私が何をしようとしています(のpythonに比較的新しい)

は次のとおりです。

class Test_GithubApi_newer_than_7_days(unittest.TestCase): 
    def test_access_all_repo_pr_returns_valid_response(self): 
     with ExitStack() as stack: 

      mock_access_all_repo_pr = stack.enter_context(
       patch("GithubAPIpackage.GithubAPI._fetch_url") 
      ) 
      fake_data = {"current_user_repositories_url": "http://myfakeurl.com"} 
      mock_access_all_repo_pr.return_value = fake_data 


      result = access_all_repo_pr() 

      self.assertEqual(result, "") 

答えて

1

あなたはボンネットの下にrequestsを使用しているので、私はあなたのテストのためにresponsesを使用して提案することができますか?質問をスカートしようとはしませんが、私の経験では、requestsモジュールを扱うテストを書く場合、これが最も抵抗の少ない道であることがわかりました。テストは、よりクリーンで、より安全で、簡単に書けるようになります。

関連する問題