AssertJ란?
AssertJ란 테스트 코드를 작성할 때 사용하며 많은 기능을 통해 유용한 오류 메시지를 제공하고 테스트 코드의 가독성을 향상시키는 Java 라이브러리입니다.
Junit을 사용할 때 AssertJ를 통해 좀 더 가독성을 높이고 쉽게 이해할 수 있으며, 오늘 이 글에서는 적용 방법과 간단한 사용 예제 몇개를 다뤄보겠습니다.
우선 mvnrepository의 해당 링크를 통해 AssertJ를 검색합니다.
이후 사진에 보이는 AssertJ Core에 들어가 사용할 버젼을 클릭하면, 각 빌드 툴에 따른 적용 소스가 나와있습니다. 저는 gradle용을 가져가겠습니다.
자신에게 맞는 빌드 툴을 선택하시면 나오는 내용을 모두 복사해도 상관없으나, 사실상 적용하는 부분은 빨간 줄이 쳐져있는 부분이기 때문에 저는 빨간줄 부분만 복사해서 넣겠습니다.
위 사진처럼 적용 후 gradle을 업데이트하면 라이브러리에 AssertJ가 포함됩니다. 그러면 AssertJ를 사용할 준비를 마친 것입니다.
이제 테스트 코드에서 사용해보겠습니다.
우선 테스트 클래스에 AssertJ를 임포트할때, 다음 사진과 같이 Import해줍니다.
이러면 이제 모든 Assertions아래의 메서드를 사용할 수 있습니다.
우선 간단한 예제를 보겠습니다
AssertJ 공식 홈페이지 : AssertJ - 유창한 어설션 자바 라이브러리 에 나와있는 예제입니다. AssertJ는 인자에 객체를 넣은 후 .메소드를 통해 필요한 조건을 점검합니다.
- isNotNull() : 값이 Null이 아닌지
- startWith("The") : The로 시작하는 값인지
- contains("Lord") : 값에 Lord라는 값이 포함되어있는지
- endsWith("Rings") : Rings라는 값으로 끝나는지
이처럼 The Lord of the Rings라는 값이 위 네 가지 조건에 부합하는지 점검하는 테스트라고 보시면 되겠습니다.
다음은 어설션이 실패하는 예시입니다.
우선 이름은 Frodo, 나이는 33살인 객체 Frodo를 선언하고, 그 객체의 나이를 가져왔습니다.
as 메소드는 해당 assert문에 이름을 붙이는 메서드입니다. 마지막에 다루겠지만 이 메서드는 항상 다른 조건부메서드보다 앞에 존재해야합니다.
그리고 isEqualTo메소드를 통해 frodo객체 안의 나이 요소가 100과 동일한지 확인하고 있습니다. 하지만 위에서 33으로 값을 초기화 했기때문에 아래와 같이 에러가 발생합니다.
보시면 as메서드로 붙인 [check Frodo's age]부분이 먼저 출력되고, 100과 동일한지 테스트했으나 값이 33이었다는 구문이 에러로 발생합니다. 이렇게 보기 쉽게 에러가 발생하면 좀 더 테스트할 때 디버깅이 쉬워지겠죠?
이제 사용시 주의점입니다. 주의점은 크게 세 가지입니다.
1. 객체를 먼저 선언하고 조건부메서드를 걸어 둘것.
나쁘다부분을 보시면 객체와 동시에 테스트를 진행하였으며, 어떤 어썰트문도 사용되지 않음을 볼 수 있습니다. 이렇게 사용하면 안되고 아래와 같이 객체를 먼저 선언한 후 추가 메서드를 통해 조건을 걸거나, 위와 같이 사용한 뒤 isTrue를 추가로 사용하여 assert문을 작동하여야합니다.
2.as() 호출은 어설션 전에 해야한다!
위에 잠시 다뤘던 부분입니다. as메소드는 해당 어설션을 설명하는 부분으로, 가장 먼저사용하지 않으면 여러조건 중간에 조건이 맞지않아 중단시 호출되지않기때문에 항상 as메소드는 가장 먼저 사용해야합니다.
3. withFailMessage/overridingErrorMessage는 어설션 전에 호출해야한다.
이 부분도 as()의 호출 방식과 똑같은 이유입니다. 어설션 중간이나 마지막에 있을 시에는 에러가 발생하면 호출이 되지 않기 때문에 반드시 어설션 전에 사용합니다.
오늘은 간단하게 AssertJ를 적용하고 사용하는 예시를 다뤄보았습니다. 부족한 내용이 많았을텐데 봐주셔서 감사합니다.
참고 사이트 : AssertJ - 유창한 어설션 자바 라이브러리
'JAVA' 카테고리의 다른 글
[JAVA, JS]프로그램 변수란? (0) | 2023.07.05 |
---|---|
[JAVA] JAVA와 객체지향 언어의 특징 (0) | 2023.07.04 |
[TESTCode] AssertJ 빌드툴 추가 및 적용법 (0) | 2023.07.03 |
Junit에 대하여 (0) | 2023.04.24 |
[JAVA] 숫자열 분리하기 (0) | 2023.01.31 |