ArchUnit: 애플리케이션의 아키텍처를 테스트 할 수 있는 오픈 소스 라이브러리

=> package, class, layer, 슬라이스 간의 의존성을 확인할 수 있는 기능

www.archunit.org/userguide/html/000_Index.html#_what_to_check

 

ArchUnit User Guide

ArchUnit is a free, simple and extensible library for checking the architecture of your Java code. That is, ArchUnit can check dependencies between packages and classes, layers and slices, check for cyclic dependencies and more. It does so by analyzing giv

www.archunit.org

 

 

 

 

아키텍처 테스트란?

  • A 라는 패키지가 B (또는 C, D) 패키지에서만 사용 되고 있는지 확인 가능
  • XXXSerivce라는 이름의 클래스들이 XXXController 또는 XXXService라는 이름의 클래스에서만 참조하고 있는지 확인
  • XXXService라는 이름의 클래스들이 ..service.. 라는 패키지에 들어있는지 확인
  • A라는 애노테이션을 선언한 메소드만 특정 패키지 또는 특정 애노테이션을 가진 클래스를 호출하고 있는지 확인
  • 특정한 스타일의 아키텍처를 따르고 있는지 확인

 

ArchUnit을 사용하기 위해서 먼저 의존성을 추가해주자

testCompile 'com.tngtech.archunit:archunit:0.11.0'

 

그 다음 사용법은 아래와 같다.

참고: blogs.oracle.com/javamagazine/unit-test-your-architecture-with-archunit

@Test
public void Services_should_only_be_accessed_by_Controllers() {
    // 1. 특정 패키지에 해당하는 클래스를 (바이트코드를 통해) 읽어들인다
    JavaClasses importedClasses = new ClassFileImporter().importPackages("com.mycompany.myapp");

    // 2. 확인할 규칙을 정의한다
    ArchRule myRule = classes()
        .that().resideInAPackage("..service..")
        .should().onlyBeAccessed().byAnyPackage("..controller..", "..service..");

    // 3. 읽어들인 클래스들이 그 규칙을 잘 따르는지 확인한다
    myRule.check(importedClasses);
}

 

 

ArchUnit의 한가지 아쉬운점은 DisplayName을 설정하지 못한다

junit engine을 확장하여 archunit-junit 모듈을 만든 것이기 때문이다 (archunit engine을 따로 사용)

+ Recent posts