JUnit Assertion을 AssertJ로 마이그레이션하기
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
2. 마이그레이션을 진행할 프로젝트 root 경로에 .sh 확장자로 파일을 만들고, 스크립트 내용을 붙여넣기 한다.
3. 터미널에서 sh 명령어를 사용해서 스크립트를 실행하면 된다.
$ sh {파일명}.sh
IntelliJ를 사용한다면 스크립트 왼쪽 상단에 실행 버튼(▹)이 생기니 요걸 클릭해서 실행해도 된다.
코틀린 프로젝트에서 사용하고 싶다면?
이 스크립트는 별도의 옵션을 주지 않으면 ~Test.java로 끝나는 파일에만 적용된다. 만약 코틀린 프로젝트에서 사용하고 싶다면 명령어를 실행할 때 pattern을 *Test.kt로 직접 지정해주면 된다.
$ sh {파일명}.sh "*Test.kt"
실행 결과 모든 테스트 코드들이 아래와 같이 바뀌었다!
4. 더 이상 사용하지 않는 Assertions import문을 제거해야 한다. 나같은 경우 Optimize import 옵션을 활성화 해놨기 때문에 이건 commit할 때 알아서 지워진다.
References
'if (study) > 잡다구리' 카테고리의 다른 글
ktlint로 Kotlin coding convention 맞추기 (0) | 2020.07.28 |
---|---|
투명도 계산기(Opacity Calculator) (0) | 2020.06.21 |
[압축해제] 내가 쓰는 앱이 렉이 걸리는 이유 (0) | 2020.06.03 |