Skip to content

Instantly share code, notes, and snippets.

@sumanmaity112
Last active June 17, 2020 14:59
Show Gist options
  • Save sumanmaity112/545823714822902a2a4fa83e1be261f2 to your computer and use it in GitHub Desktop.
Save sumanmaity112/545823714822902a2a4fa83e1be261f2 to your computer and use it in GitHub Desktop.
Architecture Fitness Test example
package platform.medium.example.architecture;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noMethods;
import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.slices;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.importer.ImportOption.DoNotIncludeTests;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
@AnalyzeClasses(packages = "platform.medium.example", importOptions = DoNotIncludeTests.class)
class ArchitectureFitnessTest {
@ArchTest
static void applicationDoesNotHaveCyclicDependencies(JavaClasses classes) {
slices().matching("..example.(*)..").should().beFreeOfCycles().check(classes);
}
@ArchTest
static void domainDoesNotImportFromAdapterPackage(JavaClasses classes) {
noClasses()
.that()
.resideInAPackage("..domain..")
.should()
.dependOnClassesThat()
.resideInAPackage("..adapters..")
.check(classes);
}
@ArchTest
static void domainDoesNotImportFromAwsPackages(JavaClasses classes) {
noClasses()
.that()
.resideInAPackage("..domain..")
.should()
.dependOnClassesThat()
.resideInAnyPackage("..amazonaws..", "..aws..")
.check(classes);
}
@ArchTest
static void oneAdapterShouldNotDependOnAnother(JavaClasses classes) {
slices()
.matching("..adapters.(**)")
.should()
.notDependOnEachOther()
.check(classes);
}
@ArchTest
static void shouldUseImmutableModelClasses(JavaClasses classes) {
noMethods()
.should()
.haveNameMatching("set.*")
.check(classes);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment