ArchUnit: 애플리케이션의 아키텍처를 테스트 할 수 있는 오픈 소스 라이브러리
=> package, class, layer, 슬라이스 간의 의존성을 확인할 수 있는 기능
www.archunit.org/userguide/html/000_Index.html#_what_to_check
아키텍처 테스트란?
- 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을 따로 사용)
'Java (+ Spring)' 카테고리의 다른 글
JVM과 Garbage Collector (0) | 2021.02.13 |
---|---|
운영 이슈 테스트: Chaos Monkey (0) | 2021.02.11 |
Application의 성능 테스트하기: JMeter (0) | 2021.02.11 |
도커로 테스트 하기: TestContainers (0) | 2021.02.10 |
Mock객체로 테스트 하기: Mockito (0) | 2021.02.10 |