Java/TDD

단언 메서드 (assertion methods)

annovation 2025. 2. 25. 08:52

단언 메서드 (assertion methods)

  • 단언 메서드(assertion method)란, 테스트 프레임워크에서 소프트웨어 테스트 코드가 예상한 대로 동작하는지 확인하기 위해 사용하는 메서드입니다.
  • 단언 메서드는 테스트 실행 중 예상값(기대한 값)과 실제값(실행 결과)을 비교하여, 테스트가 성공했는지 실패했는지를 판단합니다.
  • 만약 비교 결과가 예상과 다르면 테스트는 실패로 간주되고, 에러 메시지가 출력됩니다.

테스트 프레임워크 (Test Framework)

      • 테스트 프레임워크는 소프트웨어가 제대로 동작하는지 자동으로 확인하기 위한 도구와 라이브러리의 집합입니다. 테스트를 작성하고 실행하며 결과를 관리하는 데 도움을 줍니다.
      • 주요 테스트 프레임워크로는 JUnit이 있고, JUnit의 단언 기능을 확장해 가독성을 높인 Hamcrest와, 메서드 체인 방식을 통해 더 직관적이고 유연한 단언 작성을 지원하는 API인 AssertJ가 있습니다.

JUnit  단언 메서드

Java 언어로 작성된 테스트를 실행하고 관리하기 위한 가장 널리 사용되는 테스트 프레임워크

메서드 설명 사용 예
assertEquals(expected, actual) 두 값이 동일한지 확인 assertEquals(10, 5 + 5);
assertNotEquals(unexpected, actual) 두 값이 서로 다른지 확인 assertNotEquals(10, 5 + 3);
assertTrue(condition) 조건이 참인지 확인 assertTrue(10 > 5);
assertFalse(condition) 조건이 거짓인지 확인 assertFalse(10 < 5);
assertNull(object) 객체가 null인지 확인 assertNull(nullValue);
assertNotNull(object) 객체가 null이 아닌지 확인 assertNotNull("Hello");
assertSame(expected, actual) 두 객체가 같은 참조를 가리키는지 확인 assertSame(obj1, obj1);
assertNotSame(unexpected, actual) 두 객체가 다른 참조를 가리키는지 확인 assertNotSame(obj1, obj2);
assertArrayEquals(expected, actual) 두 배열의 내용이 동일한지 확인 assertArrayEquals(new int[]{1, 2}, new int[]{1, 2});
assertThrows(expectedException, executable) 특정 예외가 발생하는지 확인 assertThrows(IllegalArgumentException.class, () -> { ... });
assertTimeout(timeout, executable) 주어진 시간 내에 코드가 실행되는지 확인 assertTimeout(Duration.ofSeconds(1), () -> { Thread.sleep(500); });
assertAll(executables...) 여러 조건을 동시에 확인 assertAll(() -> assertEquals(...), () -> assertNotNull(...));

Hamcrest

JUnit에서 활용할 수 있는 매처(matcher) 라이브러리로, 가독성 높은 조건 표현을 가능하게 해줌

메서드 설명 사용 예
assertThat(actual, matcher) 주어진 값이 매처 조건과 일치하는지 확인 assertThat(10, is(10));
is(value) 값이 동일한지 확인 assertThat("abc", is("abc"));
not(matcher) 조건이 충족되지 않는지 확인 assertThat(10, not(5));
equalTo(value) 값이 정확히 같아야 함 assertThat("abc", equalTo("abc"));
containsString(value) 문자열에 특정 텍스트가 포함되어 있는지 확인 assertThat("Hello, World!", containsString("World"));
hasItems(item1, item2) 컬렉션에 특정 항목들이 포함되어 있는지 확인 assertThat(list, hasItems("apple", "banana"));
greaterThan(value) 값이 주어진 값보다 큰지 확인 assertThat(10, greaterThan(5));
lessThan(value) 값이 주어진 값보다 작은지 확인 assertThat(5, lessThan(10));
startsWith(prefix) 문자열이 특정 접두사로 시작하는지 확인 assertThat("Hello", startsWith("Hel"));
endsWith(suffix) 문자열이 특정 접미사로 끝나는지 확인 assertThat("World", endsWith("ld"));

AssertJ 

AssertJ는 JUnit의 단언 기능을 확장한 라이브러리로, 더 유연하고 강력한 단언 메서드를 제공

메서드 설명 사용 예
assertThat(actual).isEqualTo(value) 값이 동일한지 확인 assertThat(10).isEqualTo(10);
assertThat(actual).isNotEqualTo(value) 값이 동일하지 않은지 확인 assertThat(10).isNotEqualTo(5);
assertThat(actual).isNull() 객체가 null인지 확인 assertThat(nullValue).isNull();
assertThat(actual).isNotNull() 객체가 null이 아닌지 확인 assertThat("Hello").isNotNull();
assertThat(list).contains(values...) 리스트에 특정 값이 포함되어 있는지 확인 assertThat(Arrays.asList("a", "b")).contains("a");
assertThat(list).doesNotContain(values...) 리스트에 특정 값이 포함되지 않았는지 확인 assertThat(Arrays.asList("a", "b")).doesNotContain("c");
assertThat(string).startsWith(value) 문자열이 특정 접두사로 시작하는지 확인 assertThat("Hello").startsWith("Hel");
assertThat(string).endsWith(value) 문자열이 특정 접미사로 끝나는지 확인 assertThat("World").endsWith("ld");
assertThatThrownBy(executable).isInstanceOf(exception) 특정 코드가 예외를 던지는지 확인 assertThatThrownBy(() -> { throw new Exception(); }).isInstanceOf(Exception.class);
assertThat(map).containsKey(key) 맵에 특정 키가 포함되어 있는지 확인 assertThat(myMap).containsKey("key");
assertThat(map).containsEntry(key, value) 맵에 특정 키-값 쌍이 포함되어 있는지 확인 assertThat(myMap).containsEntry("key", "value");

 


출처

OpenAI ChatGPT (https://openai.com)

반응형