AssertJ 소개testCompile ‘org.assertj:assertj-core:3.6.2’ DarkKaiser, 2017년 9월 14일2023년 9월 5일 멋진 테스트 코드를 작성하도록 돕는 AssertJ 라이브러리에 대해서 알아봅시다. AssertJ의 장점 메소드 체이닝을 지원하기 때문에 좀 더 깔끔하고 읽기 쉬운 테스트 코드를 작성할 수 있습니다. 개발자가 테스트를 하면서 필요하다고 상상할 수 있는 거의 모든 메소드를 제공합니다. 라이브러리 의존성 설정 Java8 이상 기반 프로젝트는 3.x 버전을, Java7 이하 기반 프로젝트는 2.x 버전을 사용하셔야 합니다. Gradle Java8 testCompile 'org.assertj:assertj-core:3.6.2' Java7testCompile 'org.assertj:assertj-core:2.6.0' Maven <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <!-- use 2.6.0 for Java 7 projects --> <version>3.6.2</version> <scope>test</scope> </dependency> AssertJ 메소드 임포트 다음과 같이 정적 임포트를 하면 AssertJ의 다양한 API를 클래스 이름없이 바로 사용할 수 있습니다. import static org.assertj.core.api.Assertions.*; 테스트 대상 지정하기 모든 테스트 코드는 assertThat() 메소드에서 출발합니다.다음과 같은 포멧으로 AssertJ에서 제공하는 다양한 메소드를 연쇄 호출 하면서 코드를 작성할 수 있습니다. assertThat(테스트 타켓).메소드1().메소드2().메소드3(); 문자열 테스트 간단한 문자열 테스트 코드를 통해 AssertJ가 얼마나 강력한지 살펴봅시다. assertThat("Hello, world! Nice to meet you.") // 주어진 "Hello, world! Nice to meet you."라는 문자열은 .isNotEmpty() // 비어있지 않고 .contains("Nice") // "Nice"를 포함하고 .contains("world") // "world"도 포함하고 .doesNotContain("ZZZ") // "ZZZ"는 포함하지 않으며 .startsWith("Hell") // "Hell"로 시작하고 .endsWith("u.") // "u."로 끝나며 .isEqualTo("Hello, world! Nice to meet you."); 7개의 메소드를 연쇄적으로 호출하여 이해하기 쉬운 테스트 코드를 작성하였습니다.AssertJ 없이 이러한 테스트 코드를 작성했더라면 얼마나 많은 코드가 필요했었을까요? :sweat_smile: 숫자 테스트 대소 비교 뿐만 아니라, 오프셋을 이용하여 좀 더 느슨한 비교까지 가능합니다. assertThat(3.14d) // 주어진 3.14라는 숫자는 .isPositive() // 양수이고 .isGreaterThan(3) // 3보다 크며 .isLessThan(4) // 4보다 작습니다 .isEqualTo(3, offset(1d)) // 오프셋 1 기준으로 3과 같고 .isEqualTo(3.1, offset(0.1d)) // 오프셋 0.1 기준으로 3.1과 같으며 .isEqualTo(3.14); // 오프셋 없이는 3.14와 같습니다 Java