☕️ java
🆚 AssertJ과 JUnit 의 Assertions 비교
beomsic
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);