ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] AssertJ 정리
    Spring 2022. 1. 4. 01:41

    assertj는 자바 테스트에 사용되며, 메소드 체이닝을 통해 테스트코드의 가독성과 편의성을 높여주는 라이브러리다.

     

     

    Assertion description

    assertion이 수행될 때 설명을 추가할 수 있다.

    as라는 메소드로 지정할 수 있는데 assertion이 수행되기전에 작성되야한다.

     

    TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, Race.HOBBIT);
    
    assertThat(frodo.getAge()).as("check %s's age", frodo.getName()) .isEqualTo(100);

    Filtering assertions

    @Test
    void filter_test() {
      List<Human> list = new ArrayList<>();
      Human kim = new Human("Kim", 22);
      Human park = new Human("Park", 25);
      Human lee = new Human("Lee", 22);
      Human amy = new Human("Amy", 25);
      Human jack = new Human("Jack", 22);
    
      list.add(kim);
      list.add(park);
      list.add(lee);
      list.add(amy);
      list.add(jack);
    
      assertThat(list).filteredOn(human -> human.getName().contains("a"))
          .containsOnly(park, jack);
      }

     

    a를 포함된 객체를 필터링을 한후 리스트로 비교한다. 대소문자를 구분한다.

     

    객체의 프로퍼티를 검증

    @Test
    void filter_test2() {
    
      List<Human> list = new ArrayList<>();
      Human kim = new Human("Kim", 22);
      Human park = new Human("Park", 25);
      Human lee = new Human("Lee", 25);
      Human amy = new Human("Amy", 22);
      Human jack = new Human("Jack", 22);
    
      list.add(kim);
      list.add(park);
      list.add(lee);
      list.add(amy);
      list.add(jack);
    
      assertThat(list).filteredOn("age", 25).containsOnly(park, lee);
      assertThat(list).filteredOn("age", notIn(22, 23)).containsOnly(park, lee);
      assertThat(list).filteredOn("age", not(22)).containsOnly(park, lee);
      
    }

    filterdOn함수는 객체의 프로퍼티에 접근해서 검증도 가능하다.

     

    프로퍼티를 추출하기

    assertThat(list).extracting("name").contains("Kim", "Park", "Lee", "Amy", "Jack");
    
    assertThat(list).extracting("name", String.class).contains("Kim", "Park", "Lee", "Amy", "Jack");
    //doesNotContain도 존재
    
    assertThat(list).extracting("name", "age")
      .contains(
        tuple("Kim", 22), 
        tuple("Park", 25), 
        tuple("Lee", 25), 
        tuple("Amy", 22), 
        tuple("Jack",22)
    );
    
    //tuple로도 가능

    객체의 프로퍼티를 추출해서 비교할 수도 있다.

     

    String assertions

    @Test
    void 문자열_검증() {
      String expression = "This is a string";
      assertThat(expression).startsWith("This").endsWith("string").contains("a");
    }

    string의 경우 이렇게 시작부분 끝부분 포함을 설정해줄수있다.

    Exception 처리 test

     

    @Test
    public void exception_assertion_example() {
    	String name = Sonataaaaa;
        
        assertThatThrownBy(() -> new Car(name))
            .isInstanceOf(Exception.class)
            .hasMessageContaining("이름 길이가 5이하여야 합니다.");
    };

    예외처리의 경우 예외처리 클래스와 메세지를 확인해볼 수 있다.

    객체 비교

    //isSameAs => 주소값 비교. 메모리 상에서 같은 객체를 참조하는지 확인
    assertThat(a).isSameAs(b);
    
    //isEqualTo => 값 비교. 객체가 서로 같은 값을 가지고 있는지 확인
    assertThat(a).isEqualTo(b);

     

     

     

    출처 :

    [AssertJ] JUnit과 같이 쓰기 좋은 AssertJ 필수 부분 정리 (tistory.com)

    AssertJ 필수 기능 정리 (JAVA) (tistory.com)

    댓글

Designed by Tistory.