반응형
💋 RestAssured란?
- RestAssured는 자바를 기반으로한 API 테스트 프레임워크
- RESTful API를 테스트하기 위한 라이브러리 중 하나로, API 요청과 응답에 대한 테스트가 가능하다.
- RestAssured는 테스트할 API의 요청과 응답을 쉽게 파싱하고 검증할 수 있는 다양한 메서드와 기능을 제공한다.
✔ RestAssured에서 사용되는 메서드
given() : 요청을 설정하는 메서드
- 요청 URI, 헤더, 쿠키, 요청 바디 등을 설정
when() : 요청을 수행하는 메서드
- 요청 메서드(GET, POST, PUT, DELETE 등)를 설정
then() : 응답을 검증하는 메서드
- 응답 코드, 헤더, 바디 등을 검증
extract() : 응답에서 값을 추출하는 메서드로, JSON 응답에서 JSON 객체, 배열, 문자열 등을 추출할 수 있다.
✔ RestAssured를 사용한 테스트 코드 예시
public static ExtractableResponse<Response> 제품_추가_요청(final ProductRequest request) {
return RestAssured.given()
.log().all()
.contentType(JSON)
.body(request)
.when()
.post("/products")
.then()
.log().all()
.extract();
}
public static ExtractableResponse<Response> 카트에_아이템_추가_요청(final Member member, final CartItemCreateRequest request) {
return RestAssured.given()
.log().all()
.contentType(JSON)
.body(request)
.auth().preemptive()
.basic(member.getEmail(), member.getPassword())
.when()
.post("/cart-items")
.then()
.log().all()
.extract();
}
위에서 설명한 것처럼 extract()를 통해서 반환 받은 정보를 통해서 다양한 테스트를 할 수 있다.
아래처럼 테스트하게 되면 인수테스트라고 볼 수 있다.
@Test
void 멤버의_주문_목록을_조회할_수_있다() {
final Member savedMember = memberRepository.addMember(MEMBER_GITCHAN, JOIN_EVENT_POINT);
final Long product1Id = 제품_추가하고_아이디_반환(PRODUCT_REQUEST_CAMERA_EOS_M200);
final Long product2Id = 제품_추가하고_아이디_반환(PRODUCT_REQUEST_AIRPOD);
final Long cartItem1Id = 카트에_아이템_추가하고_아이디_반환(savedMember, new CartItemCreateRequest(product1Id, 1));
final Long cartItem2Id = 카트에_아이템_추가하고_아이디_반환(savedMember, new CartItemCreateRequest(product2Id, 2));
final int originalPrice = 1_543_490;
final int usedPoint = 1000;
final long orderHistoryId = 카트_아이템_주문하고_주문_히스토리_아이디_반환(
savedMember,
new PayRequest(List.of(cartItem1Id, cartItem2Id), originalPrice, usedPoint)
);
final ExtractableResponse<Response> response = 멤버의_주문_목록_조회_요청(savedMember);
assertAll(
() -> assertThat(response.statusCode()).isEqualTo(OK.value()),
() -> assertThat(response.jsonPath().getList("orderId", Long.class).get(0)).isEqualTo(orderHistoryId),
() -> assertThat(response.jsonPath().getList("orderPrice", Integer.class).get(0)).isEqualTo(originalPrice - usedPoint),
() -> assertThat(response.jsonPath().getList("totalAmount", Integer.class).get(0)).isEqualTo(2),
() -> assertThat(response.jsonPath().getList("previewName", String.class).get(0)).isNotBlank()
);
}
인수테스트에 대해서 자세히 알고 싶다면, 이 포스팅을 참고하면 좋을 것 같다!
반응형
'TEST' 카테고리의 다른 글
[TEST] 테스트 데이터 격리: 테스트용 데이터베이스 분리, 트랜잭션 강제 롤백, @Transactional 어노테이션 사용 (0) | 2023.06.22 |
---|---|
[TEST] 인수 테스트 (Acceptance Test): ATDD, 인수테스트란? 인수테스트의 장점, 사용법 (0) | 2023.05.24 |