JUNIT
- Java 언어에서 사용할 수 있는 UNIT 테스트 프레임워크.
- 테스트의 결과는 Test 클래스로 개발자에게 테스트 방법 및 클래스의 History를 공유.
- assert method로 테스트 케이스의 수행 결과를 판별.
- annotation을 지원 ( 간단하게 테스트를 수행할 수 있다. )
단위 테스트 (UNIT Test)
- 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위 테스트.
- 프로그래밍 시에 모든 method에 대한 Test Case를 작성하여 의도된 대로 잘 동작하는지 검증 하는 절차.
- System.out.println으로하는 번거로운 디버깅이 필요없으므로 디버깅 시간을 단축시킬 수 있다.
- 하나의 기능의 결과 값이 올바르게 도출되는지 수행하는 테스트.
통합테스트(Integration Test)
- 모듈을 통합하는 과정에 모듈간의 호환성을 확인하기 위해 수행하는 테스트
- 애플리케이션은 여러 모듈로 구성되고, 모듈끼리 메시지를 주고받으며 method를 호출 하는 기능을 수행한다.
- 모듈들이 올바르게 연계되어 동작하는 지 검증이 필요할때 사용하는 테스트.
단위테스트 장점
- 통합테스트는 시스템을 구성하는 컴포넌트들이 많아 질수록 수행 시간이 오래걸린다.
- 단위테스트는 해당 부분만 독립적으로 수행하기때문에 테스트 시간이 줄고 문제의 원인을 빠르게 찾을 수 있다.
- 단위테스트를 선호 ( TDD (Test-Driven Development))
FIRST규칙
- Fast : 테스트는 빠르게 동작하고, 자주 할 수 있어야 한다.
- Independent : 각각의 테스트는 독립적이어야 한다.
- Repeatable : 반복가능해야 한다.
- Self-Validation : 테스트 성공/ 실패를 boolean으로 반환하여 자체 검증 가능.
- Timely : 테스트 적시에 해야한다.
assert method
- assertArrayEquals(a , b ) : a와 b 배열이 일치하는지 확인.
- assertEquals( a, b ) : 객체 a와 b가 같은 값을 가지는지 확인.
- assertNotEquals( a, b ) : 객체 a와 b가 다른 값을 가지는지 확인.
- assertEquals( a, b, c ) : 객체 a와 b가 오차내에서 같은 값을 가지는지 확인.
a-예상, b-결과, c-오차범위
- assertSame( a, b ) : 객체 a와 객체 b가 같은 객체인지 확인.
- assertTrue( a ) : 조건 a가 참인지 확인.
- assertNotNull( a ) : 객체 a가 null이 아닌 지 확인
- assertThrows ( 예외처리클래스.class, () -> 예외발생예상코드 );
- ssertDoesNotThrows( () -> 예외 발생예상코드 ) : 예외가 아닐 때
기본 annotation
- Test : 테스트를 만드는 모듈
- @DisplayName : 테스트클래스 또는 테스트 method에 설정하는 이름
- @ExtendsWith : 사용자가 정의한 소스만 테스트 할 때
- @BeforeEach : 각 테스트 method가 실행되기 전 호출될 method – 여러 번 호출
- @AfterEach : 각 테스트는 method가 호출 된 후 호출될 method – 여러 번 호출
- @BeforeAll : 현재 클래스의 모든 테스트 method가 호출되기 전 한번만 method를 호출해야 할 때 ( static method위에 정의)
- @AfterAll : 현재 클래스의 모든 테스트 method가 출된 된 후 마지막으로 한번만 method를 호출해야할 때 ( static method위 정의 )
- @Disable : 테스트 클래스 또는 method를 비활성화
Test Case 작성
@DisplayName(“보기좋은 이름 “);
@Test
void method명(){
given-when-then pattern : 1개의 단위 테스트를 3단계로 나눠서 작성하는 pattern
given (준비 ) : 어떤 데이터를 준비
when (실행) : 어떤 method를 실행하면
then (검증) : 어떤 결과가 나와야한다.
}