Игорь @igoresha_s
Tech/Team lead and Java Mentor
Information
- Rating
- Does not participate
- Location
- Индонезия, Индонезия
- Works in
- Date of birth
- Registered
- Activity
Specialization
Backend Developer, Software Architect
Lead
From 600,000 ₽
Git
Java
Java Spring Framework
Hibernate
PostgreSQL
Docker
RabbitMQ
Тесты и так и так будут одинаковыми, ведь нужно протестировать всю логику маппинга) огромное преимущество - это null safe библиотека, как минимум все эти кейсы проверять не нужно
Про сбой - спорно, но окэй, такое бывает, нужно смотреть что генерируется.
В статье есть пример про вынос некоторой логики в отдельные классы, так же можно выносить общие маппинги в отдельные интерфейсы и тоже их использовать. Это очень удобно.
В IntelliJ idea есть шикарный плагин для map struct’a , который подсвечивает и видит весь синтаксис, даже в строках в expression
На самом деле map struct далеко не идеален, есть сложные вещи, например прикидывание в контексте нескольких параметров, но в статье про подводные камни не сказано(
Некоторые пакеты можно исключать из покрытия, что является классной практикой. У нас, например, сущности и мапперы исключены из подсчета покрытия. Это можно гибко настраивать в JacoCo или сонаре.
Спасибо ко комментарий! Из вашего кода в примере видятся лишние if'ы
Остальные альтернативные сценарии возможны. Их нужно тестировать отдельно: мокать вызов клиента и выкидывать ошибку. Имеется ввиду сценарии
orElseThrow
. Почему jacoco считает их покрытыми - большой вопрос :)И конечно, еще нужен альтернативный сценарий, когда метод
eventService.sendEvent
не вызовется по бизнес логике. Данные сценарии я специально не отражал в туториале, он и так получился довольно большой(Вы правы на счет того, что
jacoco
не отслеживает покрытие ветки.ifPresent(eventService::sendEvent)
. По идее, здесь по бранчам покрыто50%
, хотя при генерации отчетаindex.html
отображается100%