Создать тест для функции, удаляющей начальную подстроку

Проверьте удаление только первого префикса, отсутствие совпадения, пустые строки и полное совпадение. Текущий код удаляет лишние вхождения и иногда возвращает None.

Короткий ответ

Что ответить на собеседовании

Проверьте удаление только первого префикса, отсутствие совпадения, пустые строки и полное совпадение. Текущий код удаляет лишние вхождения и иногда возвращает None.

Подробный разбор

Ответ с пояснениями

Условие

Имеется функция dif_str(source: str, prefix: str) → str, которая удаляет строку prefix из начала строки source, если source действительно начинается с prefix.

def dif_str(source: str, prefix: str) -> str:
    if source.startswith(prefix):
        return source.replace(prefix, '')

Ответ

Проверьте удаление только первого префикса, отсутствие совпадения, пустые строки и полное совпадение. Текущий код удаляет лишние вхождения и иногда возвращает None.

import pytest

@pytest.mark.parametrize('source,prefix,expected', [
    ('hello', 'he', 'llo'),
    ('ababx', 'ab', 'abx'),
    ('hello', 'x', 'hello'),
    ('hello', '', 'hello'),
    ('abc', 'abc', ''),
    ('', 'a', ''),
    ('', '', ''),
])
def test_dif_str(source, prefix, expected):
    assert dif_str(source, prefix) == expected

Тесты выявляют две ошибки: replace(prefix, '') удаляет все вхождения, а при отсутствии префикса нет return.

def dif_str(source, prefix):
    return source[len(prefix):] if source.startswith(prefix) else source

Срез соответствует заявленному контракту и корректно обрабатывает пустой префикс.

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

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

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

Подробнее