我基本上使用魔术模拟和上下文管理器来测试我的代码,我成功地模拟了我的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, "")
答案 0 :(得分:1)
由于您使用的是requests
,我建议您使用responses进行测试吗?不是试图绕过这个问题,但根据我的经验,我发现在编写处理requests
模块的测试时,这是阻力最小的路径。测试结果更清晰,更安全,更容易编写。