코알못

[TDD] SpringBoot 를 통한 TDD 손쉬운 작성 - 05) 테스트 코드 품질 높이기! - 03 본문

JAVA

[TDD] SpringBoot 를 통한 TDD 손쉬운 작성 - 05) 테스트 코드 품질 높이기! - 03

코린이s 2026. 3. 10. 22:10

저번 시간까지는 하나의 값에 대한 검증하는 방법을 배웠다!

이번 시간에는 컬렉션 검증에 자주 사용되는 AssertJ 메서드에서 알아보자!

1) extracting() 을 이용한 정보 추출 검증, contains() 를 통한 내부값 포함 여부 검증

객체 리스트에서 특정 필드만 추출해서 검증하고 싶을 때 extracting()을 사용해보자!

예를 들어 객체 리스트에서 name 필드만 추출해서 검증할 수 있다.

assertThat(users)
    .extracting(User::getName)
    .contains("Kim", "Lee");

이렇게 하면 객체 내부의 값을 꺼내서 원하는 데이터만 집중적으로 검증할 수 있다!

그리고 contains() 를 통해 내부에 해당 값을 전부 포함하고 있는지 확인한다.


2) containsAll() 목록 포함 여부 검증

앞에 contains() 와 기능 부분은 동일하게 해당 값을 전부 포함하는지 확인할 수 있다!

다만 다른점은 내부 매개변수를 직접 정의가 아닌 컬렉션으로 정의할 수 있다.

아래 예시를 보자!

assertThat(users)
	.extracting(User::getName)
	.containsAll(Arrays.asList("Kim","Lee"));

 

Arrays.asList 와 같이 컬렉션을 넘겨 해당 값들을 전부 포함하고 있는지 확인한다.

정의한 값 중에 하나라도 없으면 오류가 발생하고, 해당 값 이외에 다른 값이 더 있어도 오류 발생하지 않는점은 위 contains() 와 동일하다!


3) doesNotContain() 요소가 포함되지 않았는지 검증

특정 값이 리스트에 존재하지 않는지 확인하고 싶다면 doesNotContain()을 사용해보자!

assertThat(users)
	.extracting(User::getName)
	.doesNotContain("Kim");

이렇게 하면 name 중에 "Kim' 이 있다면 검증 실패가 된다.

doesNotContain 을 사용하면 해당 요소가 목록에 포함되어 있지 않은지 검증할 수 있다!


4) isSortedAccordingTo() 정렬 기준 검증

리스트가 특정 기준으로 정렬되어 있는지 확인하고 싶다면 isSortedAccordingTo()를 사용해보자!

오름차순인지 보려면 아래와 같이 Comparator 코드에는 natualOrder() 을 사용하면 되며

우리가 보통 네츄럴 하게 생각하는 정렬은 오름차순이기에 natualOrder 가 오름차순 정렬을 검증하는것 이라고 한다.

assertThat(numbers).isSortedAccordingTo(Comparator.naturalOrder());

오름차순은 아래와 같이 간단하게  검증 할 수 있다!

assertThat(numbers).isSorted();

만약에 내림차순 정렬 여부를 검증 한다고 하면

뒤에 Comparator 코드만 내림차순인 reverseOrder 로 변경하면 된다!

assertThat(numbers)
    .isSortedAccordingTo(Comparator.reverseOrder());

직접 Comparator 기준을 작성해서 넣을수도 있다!

Comparator 코드 작성하는 방법은 다음에 필요할때 검색해서 사용해보도록 하고 현재는 검증 방법만 알아두도록 하자!


5) containsExactly() 정확한 값과 순서 검증

앞에서 contains(), containsAll() 을 통해 리스트의 값이 모두 포함되어 있는지를 검증 할 수 있었다.

여기에 순서까지 체크하고 싶다면 containsExactly()를 사용해보자!

assertThat(numbers)
    .containsExactly(1, 2, 3);

이 메서드는

  • 값이 정확히 같아야 하고
  • 순서도 동일해야 하고
  • 추가 데이터도 없어야 한다

완전히 동일한 목록인지 검증할 때 사용한다!


6) containsExactlyElementsOf() 동일 목록 + 동일 순서 검증

containsExactlyElementsOf()도 containsExactly()와 비슷하다.

assertThat(numbers)
    .containsExactlyElementsOf(List.of(1, 2, 3));

이 메서드 역시

  • 값 동일
  • 순서 동일
  • 추가 데이터 없음

을 검증한다.

차이점은 입력 방식이다!

  • containsExactly() → 개별 값 입력
  • containsExactlyElementsOf() → 컬렉션 형태 입력

검증 대상 데이터를 List나 Set 형태로 받을 때 사용하기 편하다!

끝!

728x90
Comments