Перейти к содержанию

Написание модульных тестов для сервиса

Модульные тесты (unit tests) находятся на самом нижнем уровне пирамиды тестирования. Они ориентированы на технологии и могут использоваться в разработке. Модульный тест позволяет убедиться в правильной работе модуля — обычно под модулем понимают класс, так что тесты проверяют, ведет ли себя класс так, как ожидается.
Существует два типа модульных тестов:

  • изолированный — тестирует отдельно взятый класс, заменяя зависимости объектами-макетами;
  • общительный — тестирует класс и его зависимости.

Используемый тип теста зависит от назначения класса и его роли в архитектуре. Классы контроллеров и сервиса обычно тестируются изолированно. Доменные объекты, такие как сущности и объекты значений, чаще всего тестируются с помощью общительных модульных тестов.

Разработка модульных тестов для сущностей

Сущности тестируются при помощи общительных тестов. Обычно в тесте делается инициализация объекта, вызывается один из методов и проверяется возвращаемое значение и состояние объекта.

Разработка модульных тестов для объектов значений

Объекты значений не изменяются, поэтому обычно их легко тестировать. Не нужно беспокоиться о побочных эффектах. Как правило, тест создает объект значений в определенном состоянии, вызывает один из методов и делается вывод о возвращаемом значении.

Разработка модульных тестов для повествований

Повествования реализуют важную бизнес-логику, поэтому их тоже нужно тестировать. Прежде всего необъодимо тестировать оркестратор. Тест должен создавать объект оркестратора и проверять, шлет ли тот ожидаемую последовательность сообщений участникам. Один из тестов должен проверять оптимистичный сценарий, а также должны быть тесты для всех сценариев, в которых возможны откаты.
Такие тесты обычно пишутся с использованием макетов вместо брокера сообщений и классов для взаимодействия с БД.

Написание модульных тестов для доменных сервисов

Большая часть бизнес-логики сервиса реализуется доменными сущностями, объектами значений и повествованиями. Остальное содержится в доменных сервисах. Его методы вызывают сущности и репозитории и публикуют доменные события. Чтобы его эффективно протестировать, нужно использовать изолированные модульные тесты, которые предоставляют макеты для таких зависимостей, как репозитории и классы обмена сообщениями.

Разработка модульных тестов для контроллеров

Контроллеры — это классы сервисов, предназначенные для обработки HTTP-запросов от других сервисов и API-шлюза. Класс контроллера состоит из набора методов, обрабатывающих запросы. Эффективная стратегия тестирования контроллеров предполагает использование изолированных модульных тестов, которые заменяют макетами сервисы и репозитории.

Разработка модульных тестов для обработчиков событий и сообщений

Сервисы часто обрабатывают сообщения, переданные внешними системами. Адаптеры сообщений, подобно контроллерам, обычно представляют собой простые классы, которые обращаются к доменным сервисам. Каждый метод адаптера, как правило, вызывает метод сервиса, передавая ему данные из сообщения или события. Поэтому и тестирование адаптеров должно быть схожим с тестированием контроллеров.


Последнее обновление : 30 мая 2023 г.
Дата создания : 31 июля 2022 г.

Комментарии

Комментарии