Урок: Тестирование кода
Тестирование кода
Тестирование кода — важный аспект разработки программного обеспечения, который помогает выявить ошибки и убедиться, что код работает корректно. В этом уроке мы рассмотрим введение в юнит-тестирование, использование библиотек 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, а также написание и запуск тестов. Практикуйтесь для лучшего понимания и освоения материала.