* 핵심 키워드
1. Junit
2. AssertJ
3. @Test
4. given-when-then
* 테스트 코드
작성한 코드가 의도대로 잘 동작하는지
확인할 목적으로 작성하는 코드
test 디렉터리에서 작업
src/test
* given-when-then 패턴
테스트 코드를 세 단계로 구분해 작성하는 방식
given
테스트 실행을 준비하는 단계
메뉴를 저장하기 위한 준비 과정
when
테스트를 진행하는 단계
실제로 메뉴를 저장
then
테스트 결과를 검증하는 단계
메뉴가 잘 추가되었는지 검증
* 스프링 부트 스타터 테스트 목록
JUnit
자바 프로그래밍 언어용
단위 테스트 프레임워크
AsserJ
검증문인 어설션을 작성하는 데 사용되는 라이브러리
Hamcrest
표현식을 이해하기 쉽게 만드는 데 사용되는
Matcher 라이브러리
Mockito
테스트에 사용할 가짜 객체인 목 객체를
쉽게 만들고, 관리하고, 검증할 수 있게 지원하는
테스트 프레임워크
JSONassert
JSON용 어설션 라이브러리
JsonPath
JSON 데이터에서
특정 데이터를 선택하고 검색하기 위한 라이브러리
이 중 JUnit과 AssertJ를 가장 많이 사용
* JUnit
자바 언어를 위한
단위 테스트 프레임워크
단위 테스트
작성한 코드가 의도대로 작동하는지
작은 단위로 검증하는 것
단위는 주로 메서드가 됨
테스트 결과가 직관적이라 좋다
테스트 방식을 구분할 수 있는 애너테이션 제공
@Test 애너테이션
메서드를 호출할 때마다
새 인스턴스를 생성, 독립 테스트 가능
예상 결과를 검증하는
어설션 메서드 제공
사용 방법이 단순
테스트 코드 작성 시간이 적음
자동 실행, 자체 결과를 확인하고
즉각적인 피드백 제공
@DisplayName()
테스트 이름을 명시
ex) @DisplayName("1 + 2는 3이다")
ㄴ 테스트 이름이 1 + 2는 이다
@Test
뒤에 붙은 메서드가 테스트를 수행하는 메서드가 됨
JUnit은
테스트끼리 영향을 주지 않도록
각 테스트를 실행할 때마다
테스트를 위한 실행 객체를 만들고
테스트가 종료되면 실행 객체를 삭제
assertEquals()
JUnit에서 제공하는 검증 메서드
ex) Assertions.assertEuals(sum, a + b);
ㄴ 첫 번째 인수는 기대하는 값
ㄴ 두 번째 인수는 실제로 검증할 값
JUnit 테스트는
테스트 케이스가 하나라도 실패하면
전체 테스트를 실패한 것으로 보여줌
애너테이션에 따른 실행 순서
1. @BeforeAll
2. @BeforeEach
3. @Test
4. @AfterEach
5. @AfterAll
@BeforeAll
전체 테스트를 실행하기 전에 처음으로 한 번만 실행
한 번만 호출되어야 하므로 메서드를 static으로 선언
데이터베이스에 연결하거나
테스트 환경을 초기화할 때 사용
@BeforeEach
테스트 케이스를 시작하기 전에 매번 실행
각 인스턴스에 대해 메서드를 호출하므로 메서드는 static이면 x
테스트 메서드에서 사용하는 객체를 초기화하거나
테스트에 필요한 값을 미리 넣을 때 사용
@AfterEach
각 테스트 케이스를 종료하기 전 매번 실행
각 인스턴스에 대해 메서드를 호출하므로 메서드는 static이면 x
특정 데이터를 삭제해야 하는 경우 사용
@AfterAll
전체 테스트를 마치고 종료하기 전에 한 번만 실행
한 번만 호출되어야 하므로 메서드를 static으로 선언
데이터베이스 연결을 종료하거나
공통적으로 사용하는 자원을 해제할 때 사용
@SpringBootTest
@SpringBootApplication이 있는 클래스를 찾고
그 클래스에 포함되어 있는 빈을 찾은 다음
테스트용 애플리케이션 컨테스트라는 것을 만듬
@SpringBootApplication
메인 애플리케이션 클래스에 추가하는 애너테이션
@AutoConfigureMockMvc
MockMvc를 생성하고 자동으로 구성하는 애너테이션
MockMvc
컨트롤러를 테스트할 때 사용되는 클래스
애플리케이션을 서버에 배포하지 않고도
테스트용 MVC 환경을 만들어 요청, 전송, 응답 기능을 제공하는
유틸리티 클래스
테스트는
src/test/java 폴더에 java 클래스 파일을 만들어서 한다
* AssertJ
JUnit과 함께 사용해
검증문의 가독성을 높여주는 라이브러리
명시를 통해 가독성과 명확성을 높여준다
대규모 프로젝트에서 실수를 줄여줌
assertThat().메서드()
ex) asserThat(a + b).isEqualTo(sum)
ㄴ a + b가 sum과 같아야 한다는 의미
asserThat().isEqualTo(A)
A와 같은지 검증
asserThat().isNotEqualTo(A)
A와 다른지 검증
asserThat().contains(A)
A를 포함하는지 검증
asserThat().doesNotContain(A)
A를 포함하지 않은지 검증
asserThat().startsWith(A)
접두사가 A인지 검증
asserThat().endsWith(A)
접미사가 A인지 검증
asserThat().isEmpty()
비어 있는 값인지 검증
asserThat().isNotEmpty()
비어 있지 않은 값인지 검증
asserThat().isPostive()
양수인지 검증
asserThat().isNegative()
음수인지 검증
asserThat().isGreaterThan(1)
1보다 큰 값인지 검증
asserThat().isLessThan(1)
1보다 작은 값인지 검증
* 테스트 코드 메서드
perform()
요청을 전송하는 역할
결과로 ResultActions 객체를 받음
ResultActions 객체
andExpect() 메서드를 제공
andExpect()
응답을 검증
반환값을 검증하고 확인
accept()
요청을 보낼 때
무슨 타입으로 응답을 받을지 결정
JSON, XML 등이 있음
jsonPath("$[0].${필드명}")
JSON 응답값의 값을 가져오는 역할
0번째 배열에 들어있는 객체의 필드명을 가져옴
* HTTP 주요 응답 코드
코드 200 OK
매핑 메서드 : isOK()
코드 201 Created
매핑 메서드 : isCreated()
코드 400 Bad Request
매핑 메서드 : isBadRequest()
코드 403 Forbidden
매핑 메서드 : isForbidden()
코드 404 Not Found
매핑 메서드 : isNotFound()
코드 400번대 응답 코드
매핑 메서드 : is4xxClientError()
코드 500 Internal Server Error
매핑 메서드 : isInternalServerError()
코드 500번대 응답 코드
매핑 메서드 : is5xxServerError()
..~~~~..
* 테스트 코드
given
테스트를 준비
when
테스트를 실재로 진행
then
테스트 결과를 검증
* JUnit
단위테스트를 할 때 사용하는
자바 테스트 프레임워크
테스트 순서는
1. @BeforeAll
2. @BeforeEach
3. @Test
4. @AfterEach
5. @AfterAll
생명 주기는
@BeforeEach -> @Test -> @AfterEach
* AssertJ
JUnit과 함께 사용해
검증문의 가독성을 높여주는 라이브러리
..~~~~..
* given-when-then
given
저장할 새로운 메뉴 정보를 생성
when
저장할 새로운 메뉴 정보를 저장
then
저장된 메뉴 정보가
given 절에서 준비한 메뉴 정보와 같은지 검증
Assertions.assertEquals(sum, a + b)와 동일한 코드는
assertThat(sum).isEqualTo(a + b)이다
ResultActions
.andExpect(status().isCreated())
.andExpect(jsonPath("$[0].id").value(15))
위 코드는
HTTP 응답 코드가 201 Create하고
반환값은 값 중 0번째 요소의 id가 15인지 검증
'소프트웨어학부 > 스프링 부트 3 개발자 되기 자바 편' 카테고리의 다른 글
06장 블로그 기획하고 API 만들기 (0) | 2024.05.24 |
---|---|
05장 데이터베이스 조작이 편해지는 ORM (0) | 2024.05.16 |
03장 스프링 부트 3 구조 이해하기 (0) | 2024.05.15 |
02장 스프링 부트 3 시작하기 (0) | 2024.05.15 |
01장 자바 백엔드 개발자가 알아두면 좋은 지식 (0) | 2024.05.15 |