☕️ 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);

 

📖 참고 자료

[Java] JUnit을 활용한 Java 단위 테스트 코드 작성법 (2/3)

AssertJ vs JUnit

AssertJ과 JUnit 의 Assertion 비교

AssertJ 알아보기 (부제 : Jupiter, Hamcrest 맛보기 )