Files
spring-boot-rest/libraries-testing/src/test/java/com/baeldung/archunit/smurfs/SmurfsArchUnitTest.java
2020-08-14 09:29:27 -03:00

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);
}
}