-
🆚 AssertJ과 JUnit 의 Assertions 비교☕️ java 2023. 10. 25. 01:43
📌 Assertions 비교 (AssertJ vs JUnit)
이번에 테스트 코드를 작성하는 과정에서 Assertions를 사용하고 싶은데 위 두 가지의 차이점과 어떤 것을 선택해야 하는지 궁금했다.
🧩 AssertJ
테스트에 관련된 많은 기능을 제공하고 메서드 체이닝으로 가독성 높은 테스트 코드 작성을 지원하는 오픈 라이브러리
- 배우기 쉽다.
- 사용하기 쉽다
- fluent
- 코드를 더 읽시 쉽다
- 자동완성을 지원한다.
🧑🏻💻 예시
📍 org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Assertions; public class JUnitTest { @Test public void testEqual() { int number1 = 1; int number2 = 1; Assertions.assertEquals(number1, number2); } }
- assertEquals()을 보면 인자가 2개씩 들어가 어떤 것이 expected, actual인지 이해하기 어렵다.
📍 org.assertj.core.api.Assertions
import static org.assertj.core.api.Assertions.*; public class AssertJTest { @Test public void testEqual() { int number1 = 1; int number2 = 1; assertThat(number1).isEqualTo(number2); } }
- JUnit보다 훨씬 더 직관적이다!
🧐 Collection test
Collection test에서 비교를 한다면 AssertJ 가 훨씬 좋다.
JUnit의 경우에는 assertEquals 에 2개의 인자를 통해서 비교하지만 AssertJ는 여러 표현이 가능해 여러 비교가 가능하다.
- filteredOn
- containsOnly
- 등등
public class People { public String name; public int age; ... }
📍 org.junit.jupiter.api.Assertions
public class PeopleTest { @Test public void test() { ArrayList<People> peopleList = new ArrayList<>(); People beomsic = new TolkienCharacter("Beomsic", 25); People testPeople = new TolkienCharacter("Test", 30); peopleList.add(beomsic); peopleList.add(testPeople); List<People> expected = new ArrayList<>(); expected.add(beomsic); expected.add(testPeople); List<People> filteredList = peopleList.stream() .filter((p) -> p.name.contains("o")) .collect(Collectors.toList()); Assert.assertEquals(expected, filteredList); } }
📍 org.assertj.core.api.Assertions
public class PeopleTest { @Test public void test() { ArrayList<People> characters = new ArrayList<>(); People beomsic = new TolkienCharacter("Beomsic", 25); People testPeople = new TolkienCharacter("Test", 30); peopleList.add(beomsic); peopleList.add(testPeople); assertThat(peopleList) .filteredOn(p -> p.name.contains("o")) .containsOnly(aragorn, frodo); } }
⭐ 결론
AssertJ를 사용하면 더 가독성 있게 테스트 코드를 작성할 수 있고 사용하기도 매우 쉽다.
따라서, AssertJ를 통해 테스트 코드를 작성해봤다.
assertThat(baseBallNumber.getBaseBallNumberCount()).isEqualTo(3); assertThat(Arrays.stream(numbers).allMatch(number -> number >= 1 && number <= 9)).isTrue(); assertThat(numberSet).hasSize(3);
📖 참고 자료
'☕️ java' 카테고리의 다른 글
Multiple Assertions (1) 2023.10.29 ☕️ Java 17 (1) 2023.10.25 @ParameterizedTest (0) 2023.10.25 👀 Unit Test 네이밍 컨벤션 (0) 2023.10.24 일급 컬렉션 (1) 2023.10.24