단언 메서드 (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)
반응형
'Java > TDD' 카테고리의 다른 글
[JUNIT] REST API feat. Annotation (0) | 2025.02.22 |
---|---|
[JUNIT] TDD 단위 테스트 (Unit Test) 생성 및 사용법 (2) | 2024.12.11 |
[JUNIT] 어노테이션 (Annotation) (1) | 2024.12.08 |