Написание модульных тестов для сервиса¶
Модульные тесты (unit tests) находятся на самом нижнем уровне пирамиды тестирования. Они ориентированы на технологии и могут использоваться в разработке. Модульный тест позволяет убедиться в правильной работе модуля — обычно под модулем понимают класс, так что тесты проверяют, ведет ли себя класс так, как ожидается.
Существует два типа модульных тестов:
- изолированный — тестирует отдельно взятый класс, заменяя зависимости объектами-макетами;
- общительный — тестирует класс и его зависимости.
Используемый тип теста зависит от назначения класса и его роли в архитектуре. Классы контроллеров и сервиса обычно тестируются изолированно. Доменные объекты, такие как сущности и объекты значений, чаще всего тестируются с помощью общительных модульных тестов.
Разработка модульных тестов для сущностей¶
Сущности тестируются при помощи общительных тестов. Обычно в тесте делается инициализация объекта, вызывается один из методов и проверяется возвращаемое значение и состояние объекта.
Разработка модульных тестов для объектов значений¶
Объекты значений не изменяются, поэтому обычно их легко тестировать. Не нужно беспокоиться о побочных эффектах. Как правило, тест создает объект значений в определенном состоянии, вызывает один из методов и делается вывод о возвращаемом значении.
Разработка модульных тестов для повествований¶
Повествования реализуют важную бизнес-логику, поэтому их тоже нужно тестировать. Прежде всего необъодимо тестировать оркестратор. Тест должен создавать объект оркестратора и проверять, шлет ли тот ожидаемую последовательность сообщений участникам. Один из тестов должен проверять оптимистичный сценарий, а также должны быть тесты для всех сценариев, в которых возможны откаты.
Такие тесты обычно пишутся с использованием макетов вместо брокера сообщений и классов для взаимодействия с БД.
Написание модульных тестов для доменных сервисов¶
Большая часть бизнес-логики сервиса реализуется доменными сущностями, объектами значений и повествованиями. Остальное содержится в доменных сервисах. Его методы вызывают сущности и репозитории и публикуют доменные события. Чтобы его эффективно протестировать, нужно использовать изолированные модульные тесты, которые предоставляют макеты для таких зависимостей, как репозитории и классы обмена сообщениями.
Разработка модульных тестов для контроллеров¶
Контроллеры — это классы сервисов, предназначенные для обработки HTTP-запросов от других сервисов и API-шлюза. Класс контроллера состоит из набора методов, обрабатывающих запросы. Эффективная стратегия тестирования контроллеров предполагает использование изолированных модульных тестов, которые заменяют макетами сервисы и репозитории.
Разработка модульных тестов для обработчиков событий и сообщений¶
Сервисы часто обрабатывают сообщения, переданные внешними системами. Адаптеры сообщений, подобно контроллерам, обычно представляют собой простые классы, которые обращаются к доменным сервисам. Каждый метод адаптера, как правило, вызывает метод сервиса, передавая ему данные из сообщения или события. Поэтому и тестирование адаптеров должно быть схожим с тестированием контроллеров.
Дата создания : 31 июля 2022 г.