기록

assertThat의 주요 메서드와 기본 사용법 본문

Web/Spring

assertThat의 주요 메서드와 기본 사용법

zyin 2025. 2. 21. 00:00

테스트 코드에서 assertThat을 사용할 때 가장 큰 장점은 가독성다양한 조건 메서드입니다. 아래 글에서는 assertThat과 함께 자주 사용하는 주요 메서드를 정리하고 예제 코드를 통해 각각의 메서드가 어떤 상황에 적합한지 설명하겠습니다.


1. 기본 비교 메서드

1-1. isEqualTo(expected)

실제 값이 기대 값과 같은지 비교합니다. 가장 기본적인 비교 메서드입니다.

assertThat(10).isEqualTo(10);
assertThat("Hello").isEqualTo("Hello");

1-2. isNotEqualTo(expected)

실제 값이 기대 값과 같지 않은지 비교합니다.

assertThat(10).isNotEqualTo(5);
assertThat("Hello").isNotEqualTo("World");

1-3. isSameAs(expected) / isNotSameAs(expected)

두 객체가 같은 객체인지 (레퍼런스 비교) 확인할 때 사용합니다.

String a = "Hello";
String b = a;

assertThat(a).isSameAs(b);       // 같은 객체이므로 통과
assertThat(new String("Hi")).isNotSameAs(new String("Hi"));  // 다른 객체이므로 통과

2. 참/거짓 비교 메서드

2-1. isTrue() / isFalse()

값이 true 또는 false인지 확인합니다.

assertThat(true).isTrue();
assertThat(false).isFalse();

2-2. isNull() / isNotNull()

값이 null인지 또는 null이 아닌지 비교합니다.

String value = null;
assertThat(value).isNull();

value = "Test";
assertThat(value).isNotNull();

3. 크기 비교 메서드

3-1. isGreaterThan(value) / isLessThan(value)

값이 주어진 값보다 크거나 작은지 비교합니다.

assertThat(10).isGreaterThan(5);
assertThat(5).isLessThan(10);

3-2. isBetween(start, end)

값이 주어진 범위 내에 있는지 비교합니다. 범위는 **포함형 (inclusive)**입니다.

assertThat(7).isBetween(5, 10);  // 5 <= 7 <= 10

3-3. isCloseTo(expected, offset)

값이 기대 값과 일정한 허용 오차(offset) 내에 있는지 비교합니다.

assertThat(10.5).isCloseTo(10, within(0.5));  // 허용 오차 0.5 이내

4. 문자열 관련 메서드

4-1. startsWith(prefix) / endsWith(suffix)

문자열이 특정 접두사(prefix) 또는 **접미사(suffix)**로 시작하거나 끝나는지 비교합니다.

assertThat("Hello, World!").startsWith("Hello");
assertThat("Hello, World!").endsWith("World!");

4-2. contains(substring)

문자열에 특정 **부분 문자열(substring)**이 포함되어 있는지 비교합니다.

assertThat("Hello, World!").contains("Hello").contains("World");

4-3. isBlank() / isNotBlank()

문자열이 비어 있거나 공백인지 또는 비어 있지 않은지 비교합니다.

assertThat("   ").isBlank();
assertThat("Hello").isNotBlank();

5. 리스트/컬렉션 관련 메서드

5-1. contains(...)

리스트에 특정 요소가 포함되어 있는지 비교합니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
assertThat(names).contains("Alice", "Charlie");

5-2. containsExactly(...)

리스트가 주어진 요소들과 정확히 동일한 순서로 포함되어 있는지 비교합니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
assertThat(names).containsExactly("Alice", "Bob", "Charlie");

5-3. hasSize(size)

리스트의 크기를 비교합니다.

List<Integer> numbers = Arrays.asList(1, 2, 3);
assertThat(numbers).hasSize(3);

5-4. isEmpty() / isNotEmpty()

리스트가 비어 있는지 또는 비어 있지 않은지 비교합니다.

List<Integer> emptyList = Collections.emptyList();
assertThat(emptyList).isEmpty();

List<Integer> nonEmptyList = Arrays.asList(1, 2, 3);
assertThat(nonEmptyList).isNotEmpty();

6. 예외 처리 관련 메서드

6-1. hasMessageContaining(substring)

예외 메시지가 특정 부분 문자열을 포함하는지 확인합니다.

Throwable thrown = catchThrowable(() -> { throw new IllegalArgumentException("Invalid input"); });

assertThat(thrown)
    .isInstanceOf(IllegalArgumentException.class)
    .hasMessageContaining("Invalid");

6-2. isInstanceOf(expectedType)

예외가 특정 타입의 인스턴스인지 확인합니다.

Throwable thrown = catchThrowable(() -> { throw new RuntimeException("Error"); });

assertThat(thrown).isInstanceOf(RuntimeException.class);

7. 객체 속성 비교 메서드

extracting(...)

객체에서 특정 속성을 추출하여 비교할 수 있습니다.

Person person = new Person("Alice", 30);

assertThat(person)
    .extracting(Person::getName, Person::getAge)
    .containsExactly("Alice", 30);

8. 요약

메서드 설명 예시
isEqualTo(expected) 값이 기대 값과 같은지 비교 assertThat(10).isEqualTo(10)
isNotEqualTo(expected) 값이 기대 값과 같지 않은지 비교 assertThat(10).isNotEqualTo(5)
isNull(), isNotNull() 값이 null인지 또는 null이 아닌지 비교 assertThat(null).isNull()
startsWith(prefix) 문자열이 특정 접두사로 시작하는지 비교 assertThat("Hello").startsWith("He")
contains(...) 리스트나 문자열에 특정 값이 포함되어 있는지 비교 assertThat(names).contains("Alice")
hasSize(size) 리스트나 컬렉션의 크기를 비교 assertThat(numbers).hasSize(3)
isInstanceOf(expectedType) 예외가 특정 타입의 인스턴스인지 비교 assertThat(thrown).isInstanceOf(RuntimeException.class)

 

Comments