Appearance
Manual - Ручное Юнит Тестирование в Python
Эта статья описывает, как проводить ручное юнит тестирование в Python. Хотя автоматизированное тестирование с использованием фреймворков, таких как unittest
или pytest
, является предпочтительным подходом, понимание принципов ручного тестирования помогает укрепить понимание тестирования в целом и может быть полезно в некоторых ситуациях.
Юнит Тестирование
Юнит тестирование — это метод тестирования программного обеспечения, где отдельные компоненты (юниты) исходного кода, такие как функции или методы, тестируются независимо, чтобы убедиться, что они работают должным образом. Цель юнит тестирования — изолировать каждый компонент и проверить, соответствует ли его поведение ожидаемому.
Ручное Юнит-Тестирование Кода
Ручное юнит-тестирование подразумевает выполнение тестовых случаев вручную, без использования автоматизированных фреймворков. Это может включать в себя:
- Написание тестовых функций: Создание функций, которые вызывают тестируемый код с различными входными данными и проверяют результаты.
- Вызов тестовых функций: Запуск этих функций и проверка результатов вручную, например, путем вывода на консоль или сравнения с ожидаемыми значениями.
- Логирование результатов: Запись результатов каждого теста, включая входные данные, ожидаемый результат и фактический результат.
Пример:
Предположим, у нас есть функция, которая вычисляет площадь прямоугольника:
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
для явного указания на неудачный тест.
Упражнения
Test_Absolute_Value: Напишите функцию
calculate_absolute_value(number: int) -> int
, которая вычисляет абсолютное значение числа. Создайте ручные тесты для положительных, отрицательных и нулевых входных данных.Test_Maximum_of_Two: Напишите функцию
find_maximum(a: int, b: int) -> int
, которая возвращает максимальное из двух чисел. Создайте ручные тесты для случаев, когдаa > b
,a < b
иa == b
.Test_String_Reversal: Напишите функцию
reverse_string(input_string: str) -> str
, которая переворачивает строку. Создайте ручные тесты для пустых строк, строк с одним символом и строк с несколькими символами.Test_List_Sum: Напишите функцию
calculate_list_sum(numbers: list[int]) -> int
, которая вычисляет сумму элементов списка целых чисел. Создайте ручные тесты для пустых списков, списков с положительными числами, списков с отрицательными числами и списков с и положительными, и отрицательными числами.Test_Leap_Year: Напишите функцию
is_leap_year(year: int) -> bool
, которая определяет, является ли год високосным. Создайте ручные тесты для обычных годов и високосных годов (например, 2000, 2004, 1900, 2003, 2100).Test_Factorial: Напишите функцию
calculate_factorial(n: int) -> int
, которая вычисляет факториал числа. Создайте ручные тесты дляn = 0
,n = 1
,n = 5
, иn = 10
. Обратите внимание на граничные условия и обработку ошибок.