Разработать unit‑тест для функции, возвращающей чётные числа

Проверьте пустой диапазон, границы 0 и 1, чётное и нечётное n, а также вызов без аргумента. Ожидаемые значения лучше задать явно, не копируя алгоритм функции в тест.

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

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

Проверьте пустой диапазон, границы 0 и 1, чётное и нечётное n, а также вызов без аргумента. Ожидаемые значения лучше задать явно, не копируя алгоритм функции в тест.

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

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

Условие

Есть функция get_even_numbers(n: int = 10) -> list, которая формирует список всех чётных чисел в диапазоне от 0 до n‑1. Необходимо написать тест, который проверит корректность её работы для различных входных параметров.

def get_even_numbers(n: int = 10) -> list:
    evens = []
    for num in range(n):
        if not num % 2:
            evens.append(num)
    return evens

Тест должен сравнивать результат функции с ожидаемым массивом чётных чисел, включая граничные случаи (n = 0, n = 1, типичные значения).

Ответ

Проверьте пустой диапазон, границы 0 и 1, чётное и нечётное n, а также вызов без аргумента. Ожидаемые значения лучше задать явно, не копируя алгоритм функции в тест.

Пример на стандартном unittest; get_even_numbers импортируется из проверяемого модуля:

import unittest

class EvenNumbersTest(unittest.TestCase):
    def test_values(self):
        cases = [(0, []), (1, [0]), (2, [0]),
                 (5, [0, 2, 4]), (6, [0, 2, 4]), (-2, [])]
        for value, expected in cases:
            with self.subTest(n=value):
                self.assertEqual(get_even_numbers(value), expected)

    def test_default(self):
        self.assertEqual(get_even_numbers(), [0, 2, 4, 6, 8])

Отрицательное n в данной реализации даёт пустой список. Проверки неверных типов добавляются только после определения соответствующего контракта.

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

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

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

Подробнее