테스트 코드 개념 익히기
- 테스트 코드
- 개발자가 작성한 코드가 의도대로 동작하는지
- 예상치 못한 문제가 없는지 확인하기 위해 작성하는 코드
- 장점
- 유지보수성 증대
- 코드 수정시에 기존 기능이 제대로 작동하는지 걱정 X
- 유지보수성 증대
테스트 코드?
- 프로젝트의
test
디렉터리에 작성
- 일반적으로
given-when-then
패턴을 사용한다.
given-when-then 패턴
- given
- 테스트 실행을 준비하는 단계
- 필요한 데이터를 설정하거나 객체 초기화
- when
- 테스트를 진행하는 단계
- 실제 코드의 메서드를 호출한다.
- then
- 테스트 결과를 검증하는 단계
- 반환된 결과나 객체의 상태를 확인한다.
@DisplayName("새로운 메뉴를 저장한다.")
@Test
public void saveMenuTest() {
// given : 메뉴를 저장하기 위한 준비 과정
final String name = "아메리카노";
final int price = 2000;
final Menu americano = new Menu(name, price);
// when : 실제로 메뉴를 저장
final long savedId = menuService.save(americano);
// then : 메뉴가 잘 추가되었는지 검증
final Menu savedMenu = menuService.findById(savedId).get();
assertThat(savedMenu.getName()).isEqualTo(name);
assertThat(savedMenu.getPrice()).isEqualTo(price);
}
스프링부트3 와 테스트
- 스프링 부트는
spring-boot-starter-test
를 통해 테스트를 통한 다양한 도구와 어노테이션을 제공함
Junit이란?
- 정의
- 자바 언어를 위한 단위 테스트 프레임워크로, 코드가 의도대로 작동하는지 작은 단위로 검증
- 구성
- 단위 테스트
- 코드의 작은 단위, 보통 메서드를 테스트하는 것을 의미한다.
- 특징
- 어노테이션을 통해 테스트 방식을 구분가능
@Test
어노테이션으로 독립 테스트 가능
- 예상 결과를 검증하는 어셜션 메서드 제공
- 사용 방법이 단순, 테스트 코드 작성 소요 시간 DOWN
- 자동 실행과 자체 결과 확인을 통한 즉각적 피드백 가능
- 단위 테스트
Junit으로 단위 테스트 코드 만들기
- 1단계
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); } }
@DisplayName
- 테스트 이름을 명시하는 어노테이션
@Test
- 테스트 메서드를 지정하는 어노테이션
@
Assertions.assertEquals
- 값이 같은지 확인하는 검증 메서드.
- 2단계
- 콘솔창에 정상으로
- 성공 여부
- 테스트 케이스 이름
- 테스트 실행 시간 정보 확인가능
- 콘솔창에 정상으로
- 3단계
- 실패시
@DisplayName("1 + 2 는 4이다") @Test public void junitTest2() { int a = 1; int b = 2; int sum = 4; Assertions.assertEquals(sum, a + b); }
- 위는 실패 케이스
- 수많은 테스트 중에 하나라도 실패하면 전체 테스트가 실패한다.
- 4단계
- 테스트관련 어노테이션 사용법
- JUnit 주요 어노테이션
@BeforeAll
- 전체 테스트 시작 전에 한 번만 실행.
- 주로 테스트 환경 초기화에 사용
데이터 베이스 연결 설정
static
메서드가 선언되어야합니다!
@BeforeEach
- 각 테스트 케이스 시작 전에 매번 실행
- 테스트에 필요한 객체 초기화나 값 설정에 사용
static
이 아니어야함
@Test
- 실제 테스트를 실행하는 메서드를 지정.
@AfterEach
- 각 테스트 케이스 종료 후에 매번 실행
- 테스트 이후 정리 작업에 사용
@AfterAll
- 전체 테스트 종료 후에 한 번만 실행
- 테스트 환경의 정리에 사용
데이터 베이스 연결 종료
시 사용
- 공용 자원의 해제
static
으로 선언
- 예제
public class JUnitCycleTest { @BeforeAll // 전체 테스트 실행 전에 딱 한번만 실행되는 메소드 static으로 선언 static void beforeAll() { System.out.println("beforeAll"); } // 각각의 테스트 실행 전에 실행되는 메소드 @BeforeEach void beforeEach() { System.out.println("beforeEach"); } @Test public void test1() { System.out.println("test1"); } @Test public void test2() { System.out.println("test2"); } @Test public void test3() { System.out.println("test3"); } // @AfterEach // 각각의 테스트 실행 후에 실행되는 메소드 @AfterEach void afterEach() { System.out.println("afterEach"); } // @AfterAll // 전체 테스트 실행 후에 딱 한번만 실행되는 메소드 static으로 선언 @AfterAll static void afterAll() { System.out.println("afterAll"); } }
Uploaded by N2T
'자바 > 스프링부트3' 카테고리의 다른 글
[스프링부트3] 테스트 코드 개념 익히기 - AssertJ (0) | 2023.10.15 |
---|---|
[스프링부트3] 테스트 코드 실제로 작성해보기 (0) | 2023.10.15 |