Создание тестов для проверки формирования ссылки

Текущая функция возвращает 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 условием не определён; тестами нельзя придумать его вместо автора интерфейса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее