Skip to content

Manual - Ручное Юнит Тестирование в Python

Эта статья описывает, как проводить ручное юнит тестирование в Python. Хотя автоматизированное тестирование с использованием фреймворков, таких как unittest или pytest, является предпочтительным подходом, понимание принципов ручного тестирования помогает укрепить понимание тестирования в целом и может быть полезно в некоторых ситуациях.

Юнит Тестирование

Юнит тестирование — это метод тестирования программного обеспечения, где отдельные компоненты (юниты) исходного кода, такие как функции или методы, тестируются независимо, чтобы убедиться, что они работают должным образом. Цель юнит тестирования — изолировать каждый компонент и проверить, соответствует ли его поведение ожидаемому.

Ручное Юнит-Тестирование Кода

Ручное юнит-тестирование подразумевает выполнение тестовых случаев вручную, без использования автоматизированных фреймворков. Это может включать в себя:

  1. Написание тестовых функций: Создание функций, которые вызывают тестируемый код с различными входными данными и проверяют результаты.
  2. Вызов тестовых функций: Запуск этих функций и проверка результатов вручную, например, путем вывода на консоль или сравнения с ожидаемыми значениями.
  3. Логирование результатов: Запись результатов каждого теста, включая входные данные, ожидаемый результат и фактический результат.

Пример:

Предположим, у нас есть функция, которая вычисляет площадь прямоугольника:

python
from typing import Tuple

def calculate_rectangle_area(dimensions: Tuple[int, int]) -> int:
    """Calculates the area of a rectangle."""
    length, width = dimensions
    return length * width

Для ручного тестирования этой функции мы можем написать тестовую функцию:

python
from typing import Tuple

def test_calculate_rectangle_area():
    """Manually tests the calculate_rectangle_area function."""
    test_cases: list[Tuple[Tuple[int, int], int]] = [
        ((2, 3), 6),
        ((0, 5), 0),
        ((5, 0), 0),
        ((-2, 3), -6), # Test with negative input.
        ((2, -3), -6), # Test with negative input.
    ]

    for dimensions, expected_area in test_cases:
        actual_area = calculate_rectangle_area(dimensions)
        print(f"Input: {dimensions}, Expected: {expected_area}, Actual: {actual_area}")
        assert actual_area == expected_area, f"Test failed for input {dimensions}"

    print("All tests passed!")


if __name__ == "__main__":
    test_calculate_rectangle_area()

В этом примере test_calculate_rectangle_area вызывает calculate_rectangle_area с разными входными данными и сравнивает результат с ожидаемым значением. Результаты выводятся на консоль, и используется assert для явного указания на неудачный тест.

Упражнения

  1. Test_Absolute_Value: Напишите функцию calculate_absolute_value(number: int) -> int, которая вычисляет абсолютное значение числа. Создайте ручные тесты для положительных, отрицательных и нулевых входных данных.

  2. Test_Maximum_of_Two: Напишите функцию find_maximum(a: int, b: int) -> int, которая возвращает максимальное из двух чисел. Создайте ручные тесты для случаев, когда a > b, a < b и a == b.

  3. Test_String_Reversal: Напишите функцию reverse_string(input_string: str) -> str, которая переворачивает строку. Создайте ручные тесты для пустых строк, строк с одним символом и строк с несколькими символами.

  4. Test_List_Sum: Напишите функцию calculate_list_sum(numbers: list[int]) -> int, которая вычисляет сумму элементов списка целых чисел. Создайте ручные тесты для пустых списков, списков с положительными числами, списков с отрицательными числами и списков с и положительными, и отрицательными числами.

  5. Test_Leap_Year: Напишите функцию is_leap_year(year: int) -> bool, которая определяет, является ли год високосным. Создайте ручные тесты для обычных годов и високосных годов (например, 2000, 2004, 1900, 2003, 2100).

  6. Test_Factorial: Напишите функцию calculate_factorial(n: int) -> int, которая вычисляет факториал числа. Создайте ручные тесты для n = 0, n = 1, n = 5, и n = 10. Обратите внимание на граничные условия и обработку ошибок.

Contacts: teffal@mail.ru