From 63b85936246124f058494c23f9986f183ffdcf18 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Wed, 3 Mar 2021 17:09:27 +0900 Subject: [PATCH] application test : archtest --- application-test/app-test/pom.xml | 8 +++ .../apptest/member/DefaultMemberService.java | 32 +++++++++++ .../com/example/apptest/study/ArchTests.java | 53 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 application-test/app-test/src/main/java/com/example/apptest/member/DefaultMemberService.java create mode 100644 application-test/app-test/src/test/java/com/example/apptest/study/ArchTests.java diff --git a/application-test/app-test/pom.xml b/application-test/app-test/pom.xml index e3ad73ad..814f1e44 100644 --- a/application-test/app-test/pom.xml +++ b/application-test/app-test/pom.xml @@ -73,6 +73,14 @@ test + + com.tngtech.archunit + archunit-junit5-engine + 0.12.0 + test + + + org.junit.vintage junit-vintage-engine diff --git a/application-test/app-test/src/main/java/com/example/apptest/member/DefaultMemberService.java b/application-test/app-test/src/main/java/com/example/apptest/member/DefaultMemberService.java new file mode 100644 index 00000000..a61637aa --- /dev/null +++ b/application-test/app-test/src/main/java/com/example/apptest/member/DefaultMemberService.java @@ -0,0 +1,32 @@ +package com.example.apptest.member; + +import com.example.apptest.domain.Member; +import com.example.apptest.domain.Study; +import com.example.apptest.study.StudyService; + +import java.util.Optional; + +public class DefaultMemberService implements MemberService{ + + StudyService studyService; + + @Override + public Optional findById(Long memberId) { + return Optional.empty(); + } + + @Override + public void validate(Long memberId) { + studyService.openStudy(new Study()); + } + + @Override + public void notify(Study newStudy) { + + } + + @Override + public void notify(Member member) { + + } +} diff --git a/application-test/app-test/src/test/java/com/example/apptest/study/ArchTests.java b/application-test/app-test/src/test/java/com/example/apptest/study/ArchTests.java new file mode 100644 index 00000000..8113a0f5 --- /dev/null +++ b/application-test/app-test/src/test/java/com/example/apptest/study/ArchTests.java @@ -0,0 +1,53 @@ +package com.example.apptest.study; + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.lang.syntax.ArchRuleDefinition; +import com.tngtech.archunit.lang.syntax.elements.ClassesShouldConjunction; +import com.tngtech.archunit.library.dependencies.SliceRule; +import com.tngtech.archunit.library.dependencies.SlicesRuleDefinition; +import org.junit.jupiter.api.Test; + +public class ArchTests { + + @Test + void packageDependencyTests_4() { + JavaClasses classes = new ClassFileImporter().importPackages("com.example.apptest"); + + SliceRule freeOfCycles = SlicesRuleDefinition.slices().matching("..apptest.(*)..") + .should().beFreeOfCycles(); + + freeOfCycles.check(classes); + } + + @Test + void packageDependencyTests_3() { + JavaClasses classes = new ClassFileImporter().importPackages("com.example.apptest"); + + ClassesShouldConjunction studyPackageRule = + ArchRuleDefinition.noClasses().that().resideOutsideOfPackage("..study..") + .should().accessClassesThat().resideInAPackage("..study.."); + + studyPackageRule.check(classes); + } + + @Test + void packageDependencyTests_2() { + JavaClasses classes = new ClassFileImporter().importPackages("com.example.apptest"); + + ClassesShouldConjunction memberPackageRule = ArchRuleDefinition.noClasses().that().resideInAPackage("..domain..") + .should().accessClassesThat().resideInAnyPackage("..member.."); + + memberPackageRule.check(classes); + } + + @Test + void packageDependencyTests() { + JavaClasses classes = new ClassFileImporter().importPackages("com.example.apptest"); + + ClassesShouldConjunction domainPackageRule = ArchRuleDefinition.classes().that().resideInAPackage("..domain..") + .should().onlyBeAccessed().byClassesThat().resideInAnyPackage("..study..", "..member..", "..domain.."); + + domainPackageRule.check(classes); + } +}