🐾 JUnit
Junit은 Java를 위한 Unit 테스트 프레임워크이다.
서버를 구동하지 않고도 테스트가 가능하기 때문에 많은 개발자들에 의해 많이 사용된다.
또 Java 8 이상부터 사용 가능하다!
⭐Unit(단위) 테스트란? 프로그램의 기본 단위인 모듈단위로 테스트를 진행 하는 것이다.
🐶 스프링부트의 JUnit 설정 방법
testImplementation 'org.springframework.boot:spring-boot-starter-test'
스프링부트에서 JUnit을 사용하기 위해서는 위의 의존성을 추가해주면 되는데
스프링부트 2.2부터는 Junit5가 기본으로 포함되어 있어 별도 설정할 필요가 없다고 한다.
(위 의존성이 기본으로 추가되어 있음)
spring-boot-starter-test는 스프링 부트 프로젝트에서 테스트 관련 기능을 포함하는 의존성 라이브러리이다 !
주요기능을 정리하자면
- JUnit5
- Spring Test - 스프링을 테스트하기 위한 다양한 기능 제공
- 스프링 부트 테스트 애노테이션 - @SpringBootTest, @ WebMvcTest,@DataJpaTest 등의 애노테이션 제공
- Moking - 테스트 중 외부 의존성을 가짜 객체로 대체하여 테스트하기 위한 라이브러리
- 내장형 DB 지원 - DB 관련 테스트 진행
등이 있다!
이 글에서는 JUnit5에 대해서만 정리해보려고 한다.
🍥핵심 Annotation
@Test
- 해당 메소드가 테스트 메소드임을 나타내는 애노테이션
- JUnit4와 달리 속성을 선언하지 않는다.
class MyFirstJUnitJupiterTests {
private final Calculator calculator = new Calculator();
@Test
void addition() {
assertEquals(2, calculator.add(1, 1));
}
}
참조 : https://junit.org/junit5/docs/current/user-guide/#writing-tests
위 코드는 Calculator라는 계산기 클래스의 add메서드 즉 더하기를 테스트하는 코드이다
@Test에 작성된 내용을 보면
assertEquals 메서드는 Junit5의 test 메소드로 첫번째 인수에 예상 값, 두번째 인수에 계산 결과를 넣어
두 인수가 일치한다면 테스트 성공, 일치하지 않는다면 실패로 이어진다.
즉 calculator.add(1, 1)가 2라면 테스트가 성공하는 것이다.
@ParameterizedTest
- 동일한 테스트 코드를 여러 매개변수 값에 대해 반복 실행 가능함
class MyFirstJUnitJupiterTests {
private final Calculator calculator = new Calculator();
@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4, 5})
void addition(int number) {
assertEquals(number * 2, calculator.add(number, number));
}
}
1,2,3,4,5가 차례로 number의 매개변수로 들어가게됨
1+1 = 1*2
2+2 = 2*2
...
를 차례로 확인하게 된다 !
@RepeatedTest
- 동일한 테스트의 반복을 위한 애노테이션
class CalculatorRepeatedTest {
@RepeatedTest(value = 5)
void testAddition() {
Calculator calculator = new Calculator();
assertEquals(2, calculator.add(1, 1));
}
}
1+1 의 결과가 2인것을 5번 반복 확인한다.
그 外
Annotation | 설명 |
@TestFactory | 동적 테스트를 위한 테스트 케이스들의 팩토리 ( @Test -> 테스트 케이스 ) |
@TestTemplate | 메소드가 반환한 호출 컨텍스트 수에 따라 여러번 호출 되도록 설계된 테스트 사례용 템플릿임을 나타냄 |
@TestClassOrder | 테스트 클래스의 실행 순서를 제어하기 위해 사용 (JUnit5은 테스트 클래스의 실행 순서를 보장하지 않음) |
@TestMethodOrder | 테스트 메소드의 실행 순서를 제어하기 위해 사용 |
@TestInstance | 테스트 인스턴스의 생명주기를 지정하는데 사용 |
@DisplayName | 테스트 클래스, 메소드에 사용자가 이름을 지정하기 위해 사용 |
@DisplayNameGeneration | 테스트 클래스,메소드의 이름을 동적으로 생성하기 위해 사용 |
@BeforeEach | 각각의 테스트 메소드 실행 전 실행되는 메소드를 의미 (주로 테스트 환경을 설정하는데 사용) @Test, @RepeatedTest, @ParameterizedTest, @TestFactory,@Before 실행 전 |
@AfterEach | 각각의 테스트 메소드 실행 후 실행하는 메소드를 의미 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @After 실행 후 |
@BeforeAll | 테스트 클래스 내의 모든 테스트 메소드가 실행되기 전 한번 실행되는 메소드를 의미 |
@AfterAll | 테스트 클래스 내의 모든 테스트 메소드가 실행된 후 한번 실행되는 메소드를 의미 |
@Nested | 중첩된 테스트 클래스를 만들 때 사용 |
@Tag | 테스트 클래스, 메소드에 사용자 정의 태그 부여 (검색 / 분류 / 필터링 위함) |
@Disabled | 테스트 클래스,메소드 비활성화하는데 사용 |
@Timeout | 실행 시간 제한 설정 위해 사용 일정시간 내 완료되지 않을 시 실패 |
@ExtendWith | 테스트 실행 환경을 확장하기 위해 사용 |
@RegisterExtension | 필드를 통해 프로그래밍 방식으로 확장을 등록하는데 사용 |
@TempDir | 임시 디렉토리를 생성 및 사용 |
🍙핵심 Assertions
JUnit5의 ' org.junit.jupiter.api.Assertions ' 클래스는 다양한 테스트용 메소드를 제공한다.
해당 메소드를 통해 테스트 중 조건을 검사하고 실패하는 경우 예외를 던질 수 있다.
Assertions | 설명 |
assertEquals(기대 값, 실제 값) | 두 값을 비교해 값이 같은지 확인 |
assertArrayEquals(기대 배열, 실제 배열) | 두 배열이 같은지 확인(값, 순서 일치해야함) |
assertTrue/False(조건) | 조건이 true/false인지 확인 |
assertNull/NotNull(객체) | 객체가 nul l/ not null인지 확인 |
assertSame/NotSame(기대값,실제값) | 두 객체의 참조가 동일O/동일X 인지 여부 확인 |
🍨참고
https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations
https://www.youtube.com/watch?v=EwI3E9Natcw
'🌱 Spring' 카테고리의 다른 글
[springboot]mapstruct로 entity와 dto 매핑하기 (0) | 2024.02.22 |
---|---|
[SpringBoot]JUnit5 + mokito를 이용한 MVC 테스트 (1) | 2023.10.16 |
스프링 빈(Spring Bean)이란? (0) | 2023.09.26 |
Spring과 SpringBoot의 차이점 (0) | 2023.09.20 |
Apache JMeter 설치 및 사용법(성능,부하 테스트) (0) | 2023.08.30 |