使用Magic mock来测试Github Api

时间:2017-11-20 22:37:40

标签: python mocking

我基本上使用魔术模拟和上下文管理器来测试我的代码,我成功地模拟了我的get_urls函数,但是我无法模拟我的access_all_repos_pr()函数,其中包含的PR数据超过7天,任何人都可以帮我解决如何模拟这些数据。

以下是我的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 个答案:

答案 0 :(得分:1)

由于您使用的是requests,我建议您使用responses进行测试吗?不是试图绕过这个问题,但根据我的经验,我发现在编写处理requests模块的测试时,这是阻力最小的路径。测试结果更清晰,更安全,更容易编写。