====== 02 - Verificación de la estructura modular ======
**Spring Modulith** permite comprobar que la organización del código respeta los límites y dependencias previstos entre módulos.
===== 1. Reglas verificadas =====
La verificación detecta principalmente:
* **Ciclos entre módulos:** el grafo de dependencias debe ser acíclico.
* **Acceso a paquetes internos:** un módulo no debe referirse a tipos internos de otro; debe depender de sus paquetes API.
* **Dependencias no declaradas:** si se configura ''allowedDependencies'', solo se permiten las dependencias enumeradas.
Se puede ejecutar durante una prueba:
@Test
void moduleStructureIsValid() {
ApplicationModules.of(Application.class).verify();
}
Si se detecta una infracción, ''verify()'' lanza una excepción. Para inspeccionar o filtrar las infracciones antes de fallar, se puede usar ''detectViolations()'':
ApplicationModules.of(Application.class)
.detectViolations()
.filter(violation -> /* criterio */ true)
.throwIfPresent();
===== 2. Personalizar las reglas =====
''verify()'' y ''detectViolations()'' aceptan ''VerificationOptions'' para incorporar reglas adicionales o ajustar las comprobaciones automáticas. Spring Modulith también puede integrar reglas de **jMolecules ArchUnit** cuando la biblioteca está presente.
La idea es automatizar las restricciones arquitectónicas en pruebas para detectar dependencias indebidas al modificar el código.
===== Referencia =====
* [Documentación oficial: Verifying Application Module Structure](https://docs.spring.io/spring-modulith/reference/verification.html) (Spring Modulith 2.1.1).