ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🆚 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] JUnit을 활용한 Java 단위 테스트 코드 작성법 (2/3)

    AssertJ vs JUnit

    AssertJ과 JUnit 의 Assertion 비교

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

    '☕️ 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

    댓글

Designed by Tistory.