如何对输出可能变化的函数进行单元测试



我有一个函数,可以根据给定的输入从URL中获取最新数据。如果输出不是固定的,并且可能每天都在变化,我该如何为这个函数编写单元测试?

def get_data_from_url(param1, param2):
url = f"https://some-service/get_data/param1={param1}&param2={param2}"
resp = requests.get(url, headers={"Content-Type": "application/json"})
something = resp.json()['something']
if something.match(pattern):
...
return some_value
elif something.match(some_other_pattern):
...
return some_other_value
else:
return something

我正在使用pytest进行单元测试。

您应该使用mock。标准模拟或requests_mock:

class Test(unittest.TestCase):
def test_with_simple_mock(self):
fake_result = collections.namedtuple("Response", ("status_code", "json"))(
200, lambda: {"something": "somevalue"}
)
with mock.patch("requests.get", return_value=fake_result):
self.assertEquals(
requests.get("https://some-service/get_data/").json()["something"],
"somevalue",
)
def test_with_requests_mock(self):
with requests_mock.Mocker() as m:
m.get("https://some-service/get_data/", text='{"something": "somevalue"}')
self.assertEquals(
requests.get("https://some-service/get_data/").json()["something"],
"somevalue",
)

最新更新