반응형
AssertJ 란
- 테스트코드를 작성 시, JUnit 보다 더욱 테스트 코드의 가독성과 편의성을 높여 주는 라이브러리이다.
- 메소드 체이닝을 지원하기 때문에 좀 더 깔끔하고 읽기 쉬운 테스트 코드를 작성할 수 있습니다.
- 형식 : assertThat(테스트 타겟).메소드1().메소드2().메소드3()’
- assertThat() 으로 시작한다.
JUnit 5 어노테이션
JUnit5 | 내용 | JUnit4 |
@Test | 테스트 Method임을 선언함. | @Test |
@DisplayName | 테스트 클래스 또는 메소드의 사용자 정의 이름을 선언할 때 사용함. | |
@BeforeEach | 모든 테스트 실행 전에 실행할 테스트에 사용함. | @Before |
@AfterEach | 모든 테스트 실행 후에 실행한 테스트에 사용함. | @After |
@BeforeAll | 현재 클래스를 실행하기 전 제일 먼저 실행할 테스트 작성하는데, static로 선언함. | @BeforeClass |
@AfterAll | 현재 클래스 종료 후 해당 테스트를 실행하는데, static으로 선언함. | @AfterClass |
@Disabled | 이 클래스나 테스트를 사용하지 않음을 표시함. | @Ignore |
AssertJ.Assertions 메서드
✔️ assertThat, assertAll
assertThat(actual).isEqualTo(expected);
assertThat을 통해 메소드 체인을 통해 가독성 좋게 작성할 수 있습니다.
@Test
void test1() {
assertThat("hello, assertThat").isNotNull()
.startsWith("hello")
.contains("assert")
.endsWith("assertThat");
}
assertAll을 통해 자바의 함수형 인터페이스를 이용해 여러 테스트를 하나로 묶어서 실행할 수 있습니다.
@Test
void test2() {
assertAll(
// test 1
() -> assertFalse(true, "Exception"),
// test 2
() -> assertNotNull(null, "Exception");
);
}
test1
- assertFalse, assertNotNull 메서드의 첫 번째 매개변수는 확인하려는 조건이며,
- 두 번째 매개변수는 실패했을 때 표시할 메시지입니다.
- 즉, assertFalse() 의 첫 번째 매개변수인 true는 false가 아니라서 테스트가 실패하여 두 번째 매개변수인 "Exception"을 출력합니다.
- assertNotNull() 의 첫 번째 매개변수가 null 이어서 테스트가 실패하여 두 번째 매개변수인 "Exception"을 출력합니다.
✔️ contains, containsOnly, containsExactly
contains는 해당 값들이 전부 검증하는 객체에 존재하는지 테스트하는 함수입니다.
void containsTest() {
List<Integer> list = Arrays.asList(1,2,3);
// 성공 : 모든 원소를 입력하지 않아도 됨
assertThat(list).contains(1,2);
// 성공 : 중복된 값이 있어도 포함만 되면 됨
assertThat(list).contains(1,2,2);
// 성공 : 순서가 바뀌어도 포함만 되면 됨
assertThat(list).contains(2,1);
// 실패 : 포함된 값이 있으면 실패
assertThat(list).contains(1,2,4);
}
containsOnly - 안에 있는 값들을 정확히 검증할 때 사용합니다.
@Test
void containsOnlyTest(){
List<Integer> list = Arrays.asList(1,2,3);
assertThat(list).containsOnly(1,2,3); // 성공
assertThat(list).containsOnly(3,2,1); // 성공
assertThat(list).containsOnly(1,1,2,2,3); // 성공
assertThat(list).containsOnly(1,2) // 실패
assertThat(list).containsOnly(1,2,3,4) // 실패
}
containsExactly - 순서와 중복여부까지 고려할 경우 사용합니다.
assertThatThrownBy, isInstanceOf 메서드
assertThartThrownBy 를 통해 예상한 예외가 발생하는지 테스트할 수 있습니다.
- isInstanceOf 메서드는 특정 예외 또는 Object가 주어진 클래스의 인스턴스인지 검증합니다.
@Test
void test4() {
String input = "abcd";
assertThatThrownBy( () -> input.charAt(10))
.isInstanceOf(StringIndexOutOfBoundException.class);
}
=> input.charAt(10)을 실행하면 input 문자열에 존재하지 않는 인덱스를 불러오므로 StringIndexOutOfBoundException 예외가 발생합니다.
이를 isInstanceOf 메서드로 발생할 예외의 타입을 확인하여 테스트할 수 있습니다.
반응형
'JAVA' 카테고리의 다른 글
[JAVA] Java Stream groupingBy 통해 그룹핑하기 (0) | 2024.08.17 |
---|---|
[JAVA] JDK, JRE, JVM 차이 및 개념 이해하기 (0) | 2024.08.10 |
[JAVA] Java Optional.ofNullable() : Null 안전성과 간결한 코드 작성 방법 (0) | 2024.01.24 |
[JAVA] Java Stream 활용법: Filter, Map, FlatMap 예제와 함께 (0) | 2024.01.24 |
[JAVA] 자바 enum 클래스 - 열거형, 특정값 매핑 이해하기 (0) | 2023.11.01 |