diff --git a/pom.xml b/pom.xml index a6c550fcc..c840452b2 100644 --- a/pom.xml +++ b/pom.xml @@ -112,6 +112,14 @@ jakarta.xml.bind-api + + com.tngtech.archunit + archunit + 1.0.1 + test + + + diff --git a/src/main/java/org/springframework/samples/petclinic/application/UseCase.java b/src/main/java/org/springframework/samples/petclinic/application/UseCase.java new file mode 100644 index 000000000..856ca0b87 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/application/UseCase.java @@ -0,0 +1,5 @@ +package org.springframework.samples.petclinic.application; + +public class UseCase { + +} diff --git a/src/main/java/org/springframework/samples/petclinic/domain/MyDomain.java b/src/main/java/org/springframework/samples/petclinic/domain/MyDomain.java new file mode 100644 index 000000000..1e6a059a3 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/domain/MyDomain.java @@ -0,0 +1,5 @@ +package org.springframework.samples.petclinic.domain; + +public class MyDomain { + +} diff --git a/src/test/java/org/springframework/samples/petclinic/LayerDependencyRulesTest.java b/src/test/java/org/springframework/samples/petclinic/LayerDependencyRulesTest.java new file mode 100644 index 000000000..4ea8bb15c --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/LayerDependencyRulesTest.java @@ -0,0 +1,26 @@ +package org.springframework.samples.petclinic; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.lang.ArchRule; +import org.junit.jupiter.api.Test; + +class LayerDependencyRulesTest { + + private final JavaClasses importedClasses = new ClassFileImporter() + .importPackages("org.springframework.samples.petclinic"); + + @Test + void applicationLayerShouldNotDependOnInfrastructureLayer() { + ArchRule rule = noClasses().that() + .resideInAPackage("..application..") + .should() + .dependOnClassesThat() + .resideInAPackage("..infrastructure.."); + + rule.check(importedClasses); + } + +}