使用魔术模拟测试GitHub API



我基本上使用魔术模拟和上下文管理器来测试我的代码,我成功地模拟了我的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_all_repo_pr函数创建模拟。我需要以某种方式重构代码吗?(相对较新)

我正在尝试的是:

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, "")

由于您在引擎盖下使用requests,我可以建议使用响应进行测试吗?不想绕过这个问题,但是根据我的经验,我发现这是撰写与requests模块的测试时的阻力最小的道路。测试最终更清洁,更安全且易于编写。

最新更新