- 최신 SpringBoot에서는 Junit이 기본 내장되어 있으므로, 따로 의존성 설정을 해주지 않아도 됨.
기능
- 단위 테스트마다 테스트 클래스 인스턴스 생성
- 어노테이션 제공
- 테스트 러너 제공
- assert 로 테슽 케이스 수행결과 판별
- 결과 성공 (녹색), 실패 (붉은색) 중 하나로 표시
JUnit 4
JUnit 5
- JVM에 테스팅 프레임워크를 실행하기 위한 근간 제공
- TestEngine 인터페이스
JUnit Jupiter
- TestEngine의 실제 구현체
- Jupiner-api 사용해서 작성한 테스트 코드 발견, 실행
JUnit Vintage
- junit4으로 작성된 테스트 코드는 Vintage에 들어가야 실행됨.
- junit5으로 작성된 테스트 코드는 Jupiter에 들어가야 실행됨.
테스트 코드 작성
JUnit 테스트
- Test에서만 사용하는 resources를 따로 생성 가능
- test 디렉토리 하위에 resource 디렉토리 생성
- @DisplayName : 이모티콘도 사용가능
- @Disabled : 테스트 수행 비활성
- @BeforeAll : 테스트 수행 시 단 한 번만 실행
- @BeforeEach : 매 테스트마다 실행
Hamcrest 테스트
- asserThat 테스트 api 사용
- 원래 junit과 다르게 actual이 먼저 매개변수로 주어져야하므로, 직관적
- 쉽게 여러 기능을 테스트할 수 있음.
- 특히 컬렉션 관련해서 여러 좋은 api가 많이 있음.
- equalTo = is ↔ not
- hasSize(n)
- everyItem()
- greaterThan() / greaterThanOrEqualTo()
- containsInAnyOrder()
Mock Object
![](https://velog.velcdn.com/images/onetuks/post/6bb9449e-fd94-4821-aa42-26830f3d30cd/image.png)
- 행위 검증 : 목 객체
- 메소드 리턴값으로 판단할 수 없는 경우
- 특정 동작을 수행하는지 확인하는 검증
- 상태 검증 : stub
Mock Object 생성을 도와주는 Test Framework
Spring Test
@ContextConfiguration
- Spring의 DI를 이용하면서 테스트하기 위해선 Configuration에 대한 Context를 테스트 클래스에서 가지고 있어야 함.
- 위 어노테이션을 사용해 어플리케이션의 IoC Configuration Context를 가져와 사용할 수 있게 된다.
- Context를 얻는 두 가지 방법
#1. 클래스를 선언하는 방법
@ContextConfiguration(classes = {AppConfiguration.class})
class 테스트클래스 {
#2. 해당 테스트 클래스 내에서만 사용하는 테스트용 Bean을 따로 만드는 방법
@ContextConfiguration
class 테스트클래스 {
@Configuration
static class Config {
@Bean
빈클래스 빈클래스변수이름() {
...
@ExtendWith(SprintExtend.class)
- JUnit과 실제로 상호작용하면서 테스트를 수행하는 건 SprintExtend
- 해당 어노테이션을 사용해서 SprintBoot 어플리케이션이 Test를 수행할 수 있도록 함.
@SpringJUnitConfig
- 위의 두 어노테이션을 포함한 Spring-JUnit 테스트 Config 어노테이션
@ActiveProfiles({프로파일})
- 해당 테스트 클래스가 profile인 상태로 테스트할 수 있도록 하는 어노테이션