Текущая функция возвращает URL с двумя точками перед json и игнорирует is_package. Тесты должны либо зафиксировать это фактическое поведение, либо выявить дефект относительно желаемого URL с одной точкой.
Создание тестов для проверки формирования ссылки
Текущая функция возвращает URL с двумя точками перед json и игнорирует is_package. Тесты должны либо зафиксировать это фактическое поведение, либо выявить дефект относительно желаемого URL с одной точкой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать набор юнит‑тестов, которые подтверждают корректность построения URL функцией get(name, version, is_package). Функция принимает три параметра: имя пакета, его версию и флаг, указывающий, что запрос относится к пакету. Внутри функции параметр is_package переопределяется строкой ".json", после чего формируется URL в виде https://package.manager/{name}/{version}.{is_package} и возвращается. Закомментированный код показывает, что в дальнейшем планируется выполнить HTTP‑запрос к сформированному адресу.
import requests
def get(name, version, is_package):
is_package = ".json"
url = f"https://package.manager/{name}/{version}.{is_package}"
return url
# result = requests.get(url)
# return result
Тесты должны проверять, что при разных значениях name и version функция возвращает ожидаемый URL, а также что переопределение is_package не влияет на результат.
Ответ
Текущая функция возвращает URL с двумя точками перед json и игнорирует is_package. Тесты должны либо зафиксировать это фактическое поведение, либо выявить дефект относительно желаемого URL с одной точкой.
Характеризационный тест существующей реализации:
import unittest
class UrlTest(unittest.TestCase):
def test_current_format_and_ignored_flag(self):
for name, version in [('pkg', '1.0'), ('other', '2.3')]:
for flag in (True, False, None):
with self.subTest(name=name, version=version, flag=flag):
self.assertEqual(
get(name, version, flag),
f'https://package.manager/{name}/{version}..json'
)
HTTP-запрос не выполняется, mock сети не нужен. Если контракт требует .json, исправьте форматирование и ожидаемую строку одновременно. Смысл False для is_package условием не определён; тестами нельзя придумать его вместо автора интерфейса.