Урок: Тестирование кода
Тестирование кода
Тестирование кода — важный аспект разработки программного обеспечения, который помогает выявить ошибки и убедиться, что код работает корректно. В этом уроке мы рассмотрим введение в юнит-тестирование, использование библиотек unittest
и pytest
, а также написание и запуск тестов.
Введение в юнит-тестирование
Юнит-тестирование — это метод тестирования, при котором тестируются отдельные компоненты кода, такие как функции и методы классов. Основная цель юнит-тестирования — изолированно проверить каждый компонент и убедиться, что он работает правильно.
Использование unittest
unittest
— это встроенная библиотека Python для написания и выполнения тестов.
import unittest def add(a, b): return a + b def subtract(a, b): return a - b class TestMathFunctions(unittest.TestCase): def test_add(self): self.assertEqual(add(3, 4), 7) self.assertEqual(add(-1, 1), 0) self.assertEqual(add(-1, -1), -2) def test_subtract(self): self.assertEqual(subtract(10, 5), 5) self.assertEqual(subtract(-1, 1), -2) self.assertEqual(subtract(-1, -1), 0) if __name__ == "__main__": unittest.main()
В этом примере функции add
и subtract
тестируются с помощью unittest
. Класс TestMathFunctions
содержит тестовые методы test_add
и test_subtract
, которые используют метод assertEqual
для проверки ожидаемых результатов.
Использование pytest
pytest
— это популярная библиотека для тестирования в Python, которая предоставляет более гибкие и удобные инструменты по сравнению с unittest
.
test_math_functions.py import pytest def add(a, b): return a + b def subtract(a, b): return a - b def test_add(): assert add(3, 4) == 7 assert add(-1, 1) == 0 assert add(-1, -1) == -2 def test_subtract(): assert subtract(10, 5) == 5 assert subtract(-1, 1) == -2 assert subtract(-1, -1) == 0 if __name__ == "__main__": pytest.main()
В этом примере функции add
и subtract
тестируются с помощью pytest
. Тестовые функции test_add
и test_subtract
используют ключевое слово assert
для проверки ожидаемых результатов.
Написание и запуск тестов
math_functions.py def add(a, b): return a + b def subtract(a, b): return a - b # test_math_functions.py import unittest from math_functions import add, subtract class TestMathFunctions(unittest.TestCase): def test_add(self): self.assertEqual(add(3, 4), 7) self.assertEqual(add(-1, 1), 0) self.assertEqual(add(-1, -1), -2) def test_subtract(self): self.assertEqual(subtract(10, 5), 5) self.assertEqual(subtract(-1, 1), -2) self.assertEqual(subtract(-1, -1), 0) if __name__ == "__main__": unittest.main()
Сохраните код в файле test_math_functions.py
и выполните команду:
python test_math_functions.py
math_functions.py def add(a, b): return a + b def subtract(a, b): return a - b # test_math_functions.py import pytest from math_functions import add, subtract def test_add(): assert add(3, 4) == 7 assert add(-1, 1) == 0 assert add(-1, -1) == -2 def test_subtract(): assert subtract(10, 5) == 5 assert subtract(-1, 1) == -2 assert subtract(-1, -1) == 0 if __name__ == "__main__": pytest.main()
Сохраните код в файле test_math_functions.py
и выполните команду:
pytest test_math_functions.py
Практическое задание
- Напишите тесты для функции, которая вычисляет факториал числа.
- Напишите тесты для функции, которая проверяет, является ли число простым.
- Напишите тесты для функции, которая возвращает наибольший общий делитель (НОД) двух чисел.
math_functions.py def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) def is_prime(n): if n <= 1: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True def gcd(a, b): while b: a, b = b, a % b return a # test_math_functions.py import pytest from math_functions import factorial, is_prime, gcd def test_factorial(): assert factorial(0) == 1 assert factorial(5) == 120 assert factorial(7) == 5040 def test_is_prime(): assert not is_prime(0) assert not is_prime(1) assert is_prime(2) assert is_prime(3) assert not is_prime(4) assert is_prime(17) def test_gcd(): assert gcd(54, 24) == 6 assert gcd(48, 18) == 6 assert gcd(101, 103) == 1 if __name__ == "__main__": pytest.main()
В первом задании создается функция factorial
и тесты для нее. Во втором задании создается функция is_prime
и тесты для нее. В третьем задании создается функция gcd
и тесты для нее.
Этот урок охватывает основы юнит-тестирования в Python, включая использование библиотек unittest
и pytest
, а также написание и запуск тестов. Практикуйтесь для лучшего понимания и освоения материала.