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