JAVA · 테스트
아키텍처 테스트 (ArchUnit)
ArchUnit으로 아키텍처 규칙을 코드로 검증합니다.
테스트고급ArchUnit아키텍처테스트레이어규칙검증
핵심 설명
ArchUnit으로 아키텍처 규칙을 코드로 검증합니다.
Java code
// ArchUnit 의존성: com.tngtech.archunit:archunit-junit5:1.2+
// import com.tngtech.archunit.junit.*;
// import com.tngtech.archunit.lang.*;
// import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.*;
// import static com.tngtech.archunit.library.Architectures.*;
// @AnalyzeClasses(packages = "com.example")
// class ArchitectureTest {
//
// // 레이어 규칙
// @ArchTest
// static final ArchRule layerRule = layeredArchitecture()
// .consideringAllDependencies()
// .layer("Controller").definedBy("..controller..")
// .layer("Service").definedBy("..service..")
// .layer("Repository").definedBy("..repository..")
// .whereLayer("Controller").mayOnlyBeAccessedByLayers()
// .whereLayer("Service").mayOnlyBeAccessedByLayers("Controller")
// .whereLayer("Repository").mayOnlyBeAccessedByLayers("Service");
//
// // 네이밍 규칙
// @ArchTest
// static final ArchRule controllerNaming = classes()
// .that().resideInAPackage("..controller..")
// .should().haveSimpleNameEndingWith("Controller");
//
// // 의존성 규칙
// @ArchTest
// static final ArchRule noCyclic = slices()
// .matching("com.example.(*)..")
// .should().beFreeOfCycles();
//
// // 어노테이션 규칙
// @ArchTest
// static final ArchRule serviceAnnotation = classes()
// .that().resideInAPackage("..service..")
// .should().beAnnotatedWith(org.springframework.stereotype.Service.class);
// }
class Main {
public static void main(String[] args) {
System.out.println("ArchUnit: 아키텍처 규칙을 단위 테스트로 검증합니다.");
System.out.println("CI에서 실행하여 아키텍처 위반을 자동으로 감지합니다.");
}
}학습 팁
ArchUnit을 CI 파이프라인에 포함하면 아키텍처 규칙 위반을 자동으로 감지합니다. 팀 전체의 아키텍처 규칙 준수를 강제할 수 있습니다.
주의할 점
너무 많은 규칙을 한 번에 추가하면 기존 코드에서 대량의 위반이 발견됩니다. 점진적으로 규칙을 추가하세요.
자주 묻는 질문
아키텍처 테스트 (ArchUnit)란 무엇인가요?
ArchUnit 으로 아키텍처 규칙을 코드로 검증합니다.
아키텍처 테스트 (ArchUnit) 학습 시 주의할 점은 무엇인가요?
너무 많은 규칙을 한 번에 추가하면 기존 코드에서 대량의 위반이 발견됩니다. 점진적으로 규칙을 추가하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.