📍테스트
내가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확인하는 작업
→ 애플리케이션을 구성하는 클래스 안에 테스트 코드를 포함시키기 보다 별도로 테스용 클래스를 만들어서 작성하는 편을 더 추천
Given-When-Then 테스트 패턴: 시나리오를 기반으로 테스트하는 패턴 | |
Given | 테스트의 상황을 설정 == 테스트 실행 준비 |
When | 특정 동작을 실행 == 테스트 진행 |
Then | 예상 결과를 확인하는 단계 == 테스트 결과 검증 |
📍JUnit 프레임워크의 테스트 조건
- public 으로 선언
- @Test 애노테이션
하나의 클래스 안에 여러 개의 테스트 메소드가 들어가는 것을 허용함! (추가 조건)
- void
- 파라미터 받지 않기
assertEquals() | 두 값이 동일한지 확인 / 두 값이 다르면 테스트는 실패 |
assertTrue() | 조건이 참인지 확인 / 조건이 거짓이면 테스트는 실패 |
assertFalse() | 조건이 거짓인지 확인 / 조건이 참이면 테스트는 실패 |
assertNull() | 객체가 null인지 확인 / 객체가 null이 아니면 테스트는 실패 |
assertNotNull() | 객체가 null이 아닌지 확인 / 객체가 null이면 테스트는 실패 |
assertSame() | 두 객체 참조가 동일한 객체를 가리키는지 확인 / 두 객체가 다르면 테스트는 실패 |
assertNotSame() | 두 객체 참조가 다른 객체를 가리키는지 확인 / 두 객체가 같으면 테스트는 실패 |
assertArrayEquals() | 두 배열이 동일한지 확인 / 두 배열이 다르면 테스트는 실패 |
public class JUnitTest {
@DisplayName("1+2는 3이다") // 테스트 이름 명시 애너테이션
@Test
public void junitTest(){
int a = 1;
int b = 2;
int sum = 3;
Assertions.assertEquals(sum,a+b);
assertThat(a+b).isEqualTo(sum); // 가독성 좋은 코드
}
}
@BeforeAll | 전체 테스트를 시작 전에 한 번만 실행 됨 ex. db 연결하거나 테스트 환경 초기화 할 때 사용 -> static으로 선언 |
@BeforeEach | 테스트 케이스를 시작하기 전에 매번 실행 ex. 테스트 메소드에서 사용하는 객체를 초기화하거나 필요한 값을 세팅할때 사용각 인스턴스에 대해 메소드를 호출해야 함으로 static은 안됨 |
@AfterAll | 전체 테스트를 마치고 종료하기 전에 한 번만 실행 ex. db 연결 종료, 자원을 해제할 때 사용전체 주기에서 한 번만 호출되어야 하므로 static 선언 |
@AfterEach | 테스트 케이스를 종료하기 전에 매번 실행 |
📍 테스트 순서
BeforAll (한번 실행) → 반복 [ BeforeEach → @Test → AfterEach ] → AfterAll (한 번 실행)
📍 예외발생 케이스 테스트
@Test(expected = 예외 클래스) {
…
}
예외발생해야 성공하는 케이스! (아무 일 없었다면 실패)
@Test(expected = ArithmeticException.class)
public void testDivideByZero() {
int a = 10;
int b = 0;
int result = a / b;
// 이 코드는 0으로 나누는 것이므로 ArithmeticException을 발생
}
📍 주의사항
- 실행순서가 보장되지 않음
테스트 결과가 순서에 영향을 준다? 잘못된 것
-> 독립적으로 순서와 상관없이 동일한 결과를 내야함!
- DB에 남아 있는 데이터와 같은 외부 환경에 영향을 받으면 안됨
아래 관련해서는 따로 작성 후 업로드 예정
- Before / After는 테스트 메소드에서 직접 호출하지 않기 때문에 서로 주고 받을 정보나 오브젝트가 있다면 인스턴스 변수를 이용해야 한다.
- 각 테스트 메소드를 실행할 때마다 테스트 클래스의 오브젝트를 새로 만든다는 점
'스프링 일지' 카테고리의 다른 글
[Spring] OAuth2 / 액세스 토큰 개념 정리 (1) | 2024.01.10 |
---|---|
[Spring] 토큰 기반 인증과 JWT 개념 정리 (0) | 2023.12.14 |
[Spring] 스프링 시큐리티, BCryptPasswordEncoder, 암호화 개념 정리 (0) | 2023.12.13 |
서버 사이드 템플릿 엔진 / 클라이언트 사이드 템플릿 엔진 정리 (1) | 2023.11.29 |
[Spring] 개념 IoC/DI (2) | 2023.11.15 |