80 lines
2.7 KiB
Java
80 lines
2.7 KiB
Java
/**
|
|
*
|
|
*/
|
|
package com.baeldung.archunit.smurfs;
|
|
|
|
|
|
import com.tngtech.archunit.core.domain.JavaClasses;
|
|
import com.tngtech.archunit.core.importer.ClassFileImporter;
|
|
import com.tngtech.archunit.lang.ArchRule;
|
|
import com.tngtech.archunit.library.Architectures.LayeredArchitecture;
|
|
|
|
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
|
|
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
|
|
import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
public class SmurfsArchUnitTest {
|
|
|
|
@Test
|
|
public void givenPresentationLayerClasses_thenWrongCheckFails() {
|
|
JavaClasses jc = new ClassFileImporter().importPackages("com.baeldung.archunit.smurfs");
|
|
|
|
ArchRule r1 = classes()
|
|
.that()
|
|
.resideInAPackage("..presentation..")
|
|
.should().onlyDependOnClassesThat()
|
|
.resideInAPackage("..service..");
|
|
|
|
assertThrows(AssertionError.class, ()-> r1.check(jc)) ;
|
|
}
|
|
|
|
|
|
@Test
|
|
public void givenPresentationLayerClasses_thenCheckWithFrameworkDependenciesSuccess() {
|
|
JavaClasses jc = new ClassFileImporter().importPackages("com.baeldung.archunit.smurfs");
|
|
|
|
ArchRule r1 = classes()
|
|
.that()
|
|
.resideInAPackage("..presentation..")
|
|
.should().onlyDependOnClassesThat()
|
|
.resideInAnyPackage("..service..", "java..", "javax..", "org.springframework..");
|
|
|
|
r1.check(jc);
|
|
}
|
|
|
|
@Test
|
|
public void givenPresentationLayerClasses_thenNoPersistenceLayerAccess() {
|
|
JavaClasses jc = new ClassFileImporter().importPackages("com.baeldung.archunit.smurfs");
|
|
|
|
ArchRule r1 = noClasses()
|
|
.that()
|
|
.resideInAPackage("..presentation..")
|
|
.should().dependOnClassesThat()
|
|
.resideInAPackage("..persistence..");
|
|
|
|
r1.check(jc);
|
|
}
|
|
|
|
@Test
|
|
public void givenApplicationClasses_thenNoLayerViolationsShouldExist() {
|
|
|
|
JavaClasses jc = new ClassFileImporter().importPackages("com.baeldung.archunit.smurfs");
|
|
|
|
LayeredArchitecture arch = layeredArchitecture()
|
|
// Define layers
|
|
.layer("Presentation").definedBy("..presentation..")
|
|
.layer("Service").definedBy("..service..")
|
|
.layer("Persistence").definedBy("..persistence..")
|
|
// Add constraints
|
|
.whereLayer("Presentation").mayNotBeAccessedByAnyLayer()
|
|
.whereLayer("Service").mayOnlyBeAccessedByLayers("Presentation")
|
|
.whereLayer("Persistence").mayOnlyBeAccessedByLayers("Service");
|
|
|
|
arch.check(jc);
|
|
}
|
|
}
|