Spring
[Spring] JUnit 이란?
배씌
2024. 5. 22. 13:47
단위 테스트(Unit Test) 란?
JUnit은 Java 에서 독립된 단위 테스트를 지원해주는 프레임워크 이다.
( ※단위테스트 : 특정 소스코드의 모듈이 의도한 대로 잘 작동하는지 검증하는 테스트. 즉, Spring 에서 단위테스트는 Spring Container 에 올라와 있는 Bean 을 테스트 하는 것.)
JUnit 이란?
- Java 개발자가 가장 많이 사용하는 테스팅 기반 프레임워크
- Java 8 이상을 필요로 함
- 테스트 작성자를 위한 API 모듈과 테스트 실행을 위한 API가 분리되어 있음
JUnit 구조

JUnit 5 는 크게 3가지 모듈로 구성
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Jupiter API : JUnit 5에 새로 추가된 테스트 코드용 API
- JUnit Platform : 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스 정의 즉, 기초적인 역할 수행
- JUnit Jupiter : JUnit 5에서 테스트 및 Extension을 작성하기 위한 새로운 프로그래밍 모델과 확장모델의 조합
JUnit Jupiter -> 테스트 코드 작성 : junit-jupiter-api 모듈 / 테스트 실행 : junit-jupiter-engine 모듈
테스트의 Class & Method 어노테이션
- Class : 최상위 클래스, static member class, @Nested class 중 적어도 하나의 메소드를 포함
- Test Method : 실제 테스트 하고자 하는 내용
- @Test : 테스트 메소드임을 나타냄
- @ParametherizedTest : 매개변수가 있는 테스트임을 나타냄
- @RepeatedTest : 반복되는 테스트를 나타냄
- LifeCycle Method : Test의 Life Cycle에 따라 실행되는 메소드
- @BeforeAll : 테스트 시작 지점에 딱 한번 실행(static 메소드만 가능)
- @BeforeEach : 각 테스트 메소드가 실행되기 전 실행
- @AfterAll : 테스트 종료 시점에 딱 한번 실행(static 메소드만 가능)
- @AfterEach : 각 테스트 메소드가 실행되고 난 후 실행
※ 전체적인 Life Cycle
BeforeAll -> BeforeEach -> Test -> AfterEach -> AfterAll
Assertions
: org.junit.jupiter.api.Assertions 패키지 사용
● assertEquals : 두 값 비교하여 일치 여부 판단
@Test
@DisplayName("assertEquals Test")
public void test () {
String expected = "2023/01/07";
String actual = "2023/01/07";
assertEqauls(expected, actual); // Test Succeed!
}
● assertArrayEquals : 두 배열 비교하여 일치 여부 판단 (두 배열 모두 null -> 동일하다 판단)
@Test
@DisplayName("assertArrayEquals Test")
public void test02() {
char[] expected = {'J','u','n','i','t'};
char[] actual = "Junit".toCharArray();
System.out.println(expected == actual); // 동일성 측면에서는 false
assertArrayEquals(expected, actual); // 동등성 측면에서는 true
}
● assertNotNull & assertNull : 객체의 null 여부 확인
@Test
@DisplayName("assertNotNull & assertNull Test")
public void test03() {
Object obj01 = null;
Object obj02 = new String("오늘은 2023/01/07");
assertNull(obj01);
assertNotNull(obj02);
}
● assertThat : 첫 파라미터에 비교 대상 값, 두번째 파라미터에 비교 로직이 담긴 Matcher 를 받음
@Test
@DisplayName("assertThat Test")
public void test05(){
//given
Member member = new Member(1L, "memberA", Grade.VIP);
//when
memberService.join(member);
Member findMember = memberService.findMember(2L);
//then
Assertions.assertThat(member).isEqualTo(findMember);
}
==> .isEqualTo() 사용해서 값이 같은지 확인