1.의의
- JUnit은 자바용 단위 테스트 작성을 위한 산업 표준 프레임워크다.
- 단위 테스트는 프로그램내의 함수나 객체들을 검사하여 코드 변경으로부터 자유롭게 개발 할 수 있도록 하는 절차이다.
- 단위 테스트의 각 테스트는 모두 독립적이여야 하며 하나의 테스트는 하나의 시나리오만을 검사한다.
- 단위 테스트는 버그를 찾기 위한 것이 아닌 개별 단위의 적합성 혹은 정확성을 확인하기 위한 방법이다.
2.JUnit
- 단위 테스트 Framework 중 하나로 JAVA 의 단위 테스트 프레임워크 표준이다.
- JUnit 은 xUnit 계열의 단위 테스팅 프레임워크로 각 언어별 다음과 같은 xUnit 들이 있다.
- 많이쓰이는 버전은 JUnit4 와 5 버전이다.
- 스프링부트 프레임워크에 포함되어 있을 정도로 많이 쓰이고 있다.
- 단정문으로 테스트 케이스의 수행 결과를 판별한다.
assertEquals(예상 값, 실제 값); //단정문
3.JUnit 5

1)의의
- JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
- 위와 같이 Junit5는 3가지 하위 프로젝트의 여러 모듈로 구성되어 있다.
- 테스트 작성자를 위한 API 모듈과 테스트 실행을 위한 API가 분리되어 있다.
2)JUnit Platform
- JVM 기반 테스트 프레임워크를 실행시키기 위한 모듈이다.
- 또한 JUnit4 환경에서도 플랫폼 모듈을 진행하는 테스트를 위해 Runner를 제공한다.
3)JUnit Jupiter
- JUnit5에서 테스트 및 확장을 작성하기 위한 프로그래밍 모델 + 확장 모델이다.
4)JUnit Vintage
- JUnit3, JUnit4 기반의 테스트를 JUnit Platform에서 실행시키기 위한 TestEngin을 제공하는 모듈이다
5)테스트 러너(test runner)
-
프로그래머들이 정의한 테스트 클래스들의 객체들을 생성하고, 그것들의 테스트 메소드들을 실행하며, 테스트 결과를 보여주는 프로그램 객체이다.
-
참고)Spring Intializr프로젝트가 spring-boot-starter-test 에서 junit-vintage-engine을 exclude되어 있는 이유
5)Junit 주요 메서드

4.Spring 에서 JUnit 실행하기
- Junit 5 의존성 추가
- spring-boot-starter-test에는 기본적으로 junit를 내장하고 있다.
- maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
dependencies {
// 생략
testImplementation('org.junit.jupiter:junit-jupiter-api:5.2.0')
testCompile('org.junit.jupiter:junit-jupiter-params:5.2.0')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.2.0')
// 생략
}
2)프로젝트 패키지 구성

- JUnit테스트를 하기 위해서는 일반적으로 테스트 대상 클래스와 테스트 클래스는 같은 패키지 내에 있어야 한다.
- Maven 프로젝트를 생성하게 되면 프로젝트 템플릿이 기본적으로 생성된다.
- /src/main/java/는 자바 코드를 보관하고단위 테스트의 소스는 ****/src/test/java/ 디렉토리에 보관한다.
- 테스트 하고자 하는 클래스가 포함된 패키지명과 동일하게 테스트 클래스를 포함하는 패키지도 동일하게 구성한다.
3.spring boot test