AssertJ는 테스트의 가독성과 유지보수성을 높이는 목적으로 등장한 Java 라이브러리다. 풍부한 테스트용 api를 제공하며, assertThat을 사용하면 읽기 좋은 테스트 코드를 작성할 수 있다.

 

JUnit Assertion 사용 방법

assertXXX(기대하는 값, 실제 값)
assertEquals(expected, actual)

사용 예시

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

internal class ExpressionParserTest {

    @Test
    fun parse() {
        assertEquals(listOf("-3.5", "+", "2.2"), ExpressionParser.parse("-3.5 + 2.2"))
    }
}

이 경우 IDE의 보조가 없으면 어떤 인자가 테스트하려는 값이고 기대하는 값인지 구분하기가 어렵다.

 

AssertJ의 assertThat 사용 방법

assertThat(실제 값).[값을 검증하기위한 메서드]
assertThat(actual).isEqualTo(expected)

사용 예시

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

internal class ExpressionParserTest {

    @Test
    fun parse() {
        assertThat(ExpressionParser.parse("-3.5 + 2.2")).isEqualTo(listOf("-3.5", "+", "2.2"))
    }
}

각 파라미터의 역할이 무엇인지 읽는 사람 입장에서 의미가 더 명확하게 이해된다. 따라서 요즘은 테스트를 작성할 때 assertThat을 활용하는 추세다.

 

하지만 이미 JUnit Assert로 작성된 테스트 케이스를 하나하나 고치는 것은 정말 귀찮다...🙃

assertj-core에서 제공하는 쉘 스크립트를 이용해서 한방에 변환해보자.

 

적용 방법

1. 여기서 본인이 사용하는 JUnit 버전에 맞는 스크립트를 복사해두자.

스크립트 소스코드 : https://github.com/joel-costigliola/assertj-core/tree/main/src/main/scripts

 

joel-costigliola/assertj-core

AssertJ is a library providing easy to use rich typed assertions - joel-costigliola/assertj-core

github.com

2. 마이그레이션을 진행할 프로젝트 root 경로에 .sh 확장자로 파일을 만들고, 스크립트 내용을 붙여넣기 한다.

3. 터미널에서 sh 명령어를 사용해서 스크립트를 실행하면 된다.

$ sh {파일명}.sh

스크립트가 실행된다 ~

IntelliJ를 사용한다면 스크립트 왼쪽 상단에 실행 버튼(▹)이 생기니 요걸 클릭해서 실행해도 된다.

코틀린 프로젝트에서 사용하고 싶다면?

이 스크립트는 별도의 옵션을 주지 않으면 ~Test.java로 끝나는 파일에만 적용된다. 만약 코틀린 프로젝트에서 사용하고 싶다면 명령어를 실행할 때 pattern을 *Test.kt로 직접 지정해주면 된다.

$ sh {파일명}.sh "*Test.kt"

실행 결과 모든 테스트 코드들이 아래와 같이 바뀌었다!

4. 더 이상 사용하지 않는 Assertions import문을 제거해야 한다. 나같은 경우 Optimize import 옵션을 활성화 해놨기 때문에 이건 commit할 때 알아서 지워진다.

References