20.01.2025 - Практическая работа №30. Интеграционное тестирование
Цель работы
Изучить интеграционное тестирование, написать примеры тестируемого кода и тестов. Тестов должно быть не менее 5 штук.
Что такое интеграционное тестирование?
Интеграционное тестирование — это процесс проверки взаимодействия между различными модулями приложения. Его цель — убедиться, что модули корректно обмениваются данными, выполняя совместную работу.
Пример тестируемого кода
Рассмотрим приложение, которое работает с пользователями и их заказами. Оно состоит из двух модулей: пользователь (User) и заказ (Order).
from user import User
class Order:
def __init__(self, order_id, user: User, total):
self.order_id = order_id
self.user = user
self.total = total
def get_order_summary(self):
return {
"order_id": self.order_id,
"user": self.user.get_user_info(),
"total": self.total
}
Интеграционные тесты
Для тестирования мы используем библиотеку unittest.
Файл тестов (test_integration.py):
import unittest
from user import User
from order import Order
class TestIntegration(unittest.TestCase):
def setUp(self):
# Создаем тестовые данные
self.user = User(user_id=1, name="Alice")
self.order = Order(order_id=101, user=self.user, total=250.75)
def test_user_info(self):
# Проверяем метод get_user_info()
user_info = self.user.get_user_info()
self.assertEqual(user_info["user_id"], 1)
self.assertEqual(user_info["name"], "Alice")
def test_order_summary(self):
# Проверяем метод get_order_summary()
order_summary = self.order.get_order_summary()
self.assertEqual(order_summary["order_id"], 101)
self.assertEqual(order_summary["total"], 250.75)
self.assertEqual(order_summary["user"], {"user_id": 1, "name": "Alice"})
def test_order_total_is_float(self):
# Убеждаемся, что total является числом с плавающей точкой
self.assertIsInstance(self.order.total, float)
def test_user_in_order(self):
# Проверяем корректность связи User и Order
self.assertEqual(self.order.user.name, "Alice")
self.assertEqual(self.order.user.user_id, 1)
def test_invalid_user(self):
# Проверяем, что нельзя передать некорректный объект пользователя
with self.assertRaises(AttributeError):
invalid_user = "Invalid"
Order(order_id=102, user=invalid_user, total=300.00)
if __name__ == "__main__":
unittest.main()
Объяснение тестов
test_user_info: проверяет метод get_user_info в классе User.
test_order_summary: проверяет метод get_order_summary в классе Order, включая корректность интеграции с объектом User.
test_order_total_is_float: удостоверяется, что значение total является числом с плавающей точкой.
test_user_in_order: проверяет связь между объектами User и Order.
test_invalid_user: проверяет обработку ошибок при передаче некорректного объекта пользователя в заказ.
Запуск тестов
Для выполнения тестов сохраните код в файл test_integration.py и выполните:
python -m unittest test_integration.py
При успешном выполнении тестов вы увидите сообщение:
.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s
OK