Open tonykang22 opened 2 years ago
<dependency> <groupId>com.tngtech.archunit</groupId> <artifactId>archunit-junit5-engine</artifactId> <version>0.12.0</version> <scope>test</scope> </dependency>
@AnalyzeClasses
@ArchTest
public class ArchTests { @Test void packageDependencyTests() { JavaClasses classes = new ClassFileImporter().importPackages("me.whiteship.inflearnthejavatest"); ArchRule domainPackageRule = classes().that().resideInAPackage("..domain..") .should().onlyBeAccessed().byClassesThat() .resideInAnyPackage("..study..", "..member..", "..domain.."); domainPackageRule.check(classes); ArchRule memberPackageRule = noClasses().that().resideInAPackage("..domain..") .should().accessClassesThat().resideInAPackage("..member.."); memberPackageRule.check(classes); ArchRule studyPackageRule = noClasses().that().resideOutsideOfPackage("..study..") .should().accessClassesThat().resideInAnyPackage("..study.."); studyPackageRule.check(classes); ArchRule freeOfCycles = slices().matching("..inflearnthejavatest.(*)..") .should().beFreeOfCycles(); freeOfCycles.check(classes); } }
@AnalyzeClasses(packagesOf = App.class) public class ArchTests { @ArchTest ArchRule domainPackageRule = classes().that().resideInAPackage("..domain..") .should().onlyBeAccessed().byClassesThat() .resideInAnyPackage("..study..", "..member..", "..domain.."); @ArchTest ArchRule memberPackageRule = noClasses().that().resideInAPackage("..domain..") .should().accessClassesThat().resideInAPackage("..member.."); @ArchTest ArchRule studyPackageRule = noClasses().that().resideOutsideOfPackage("..study..") .should().accessClassesThat().resideInAnyPackage("..study.."); @ArchTest ArchRule freeOfCycles = slices().matching("..inflearnthejavatest.(*)..") .should().beFreeOfCycles(); }
@AnalyzeClasses(packagesOf = App.class) public class ArchClassTests { @ArchTest ArchRule controllerClassRule = classes().that().haveSimpleNameEndingWith("Controller") .should().accessClassesThat().haveSimpleNameEndingWith("Service") .orShould().accessClassesThat().haveSimpleNameEndingWith("Repository"); @ArchTest ArchRule repositoryClassRule = noClasses().that().haveSimpleNameEndingWith("Repository") .should().accessClassesThat().haveSimpleNameEndingWith("Service"); @ArchTest ArchRule studyClassesRule = classes().that().haveSimpleNameStartingWith("Study") .and().areNotEnums() .and().areNotAnnotatedWith(Entity.class) .should().resideInAnyPackage("..study.."); }
이 밖에도...
6부. 아키텍처 테스트
1. ArchUnit 소개
2. ArchUnit 설치
@AnalyzeClasses
: 클래스를 읽어들여서 확인할 패키지 설정@ArchTest
: 확인할 규칙 정의3. ArchUnit: 패키지 의존성 확인하기
예시 코드
4. ArchUnit: JUnit 5 연동하기
@AnalyzeClasses
: 클래스를 읽어들여서 확인할 패키지 설정@ArchTest
: 확인할 규칙 정의예시 코드
5. ArchUnit: 클래스 의존성 확인하기
예시 코드
6. 정리
이 밖에도...