해당 포스팅은 인프런스프링 MVC1편 강의를 듣고 적은 강의 노트를 정리하며 기록하기 위한 글입니다.
강의를 시청하며, 프로젝트에 적용할 수 있는 부분들이나 궁금한 기능들을 정리하며 포스팅할 예정입니다.
제 개인적인 의견이 더해져 올바르지 않은 정보가 들어가 있다면, 피드백이나 댓글로 남겨주시면 감사하겠습니다.
자세한 강의 내용은 인프런 스프링 MVC에서 만나보실 수 있습니다.
이번 포스팅에서는 김영한님 강의에서 test 코드 작성 시 좋아하는 방식 중 하나인,
given-when-then을 언급하시는 것을 보고 그것에 대해 알아보고 정리하는 글이 되겠습니다.
Given-When-Then Pattern
given-when-pattern의 뜻을 하나씩 확인해보자.
- Given : 시나리오 진행에 필요한 값을 설정, 테스트의 상태를 설정 [준비]
- When : 시나리오 진행 필요조건 명시, 테스트하고자 하는 행동 [실행]
- Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시, 예상되는 변화 설명 [검증]
이 패턴은 [ 준비 - 실행 - 검증]이라고 할 수 있다.
참고로 여기서 assertThat은 다음 import 사용에 대해 static을 선언함으로써 더 편리하게 사용해 주는 Assertions 선언이다.
import org.assertj.core.api.Assertions;
해당 테스트 코드는 "이름, 가격, 수량을 가지는 상품이 저장소에 잘 담기는지 검증" 하는 코드이다.
given-when-then패턴은 위의 TC를 그림과 같이 설정하는 것과 같다.
given - item1과 item2를 준비한다.
when - findall()에 value로 item을 ArrayList로 꺼내는 것을 명시하고 (설정)
result에 담았다.
then - 결과가 item1 , item2 리스트의 사이즈가 2 임을 명시하였다.
list안에 item1과 item2가 존재함을 명시하였다.
정리😎
해당 테스트 코드는 정말 단순한 테스트임으로 누구나 쉽게 확인해 볼 수 있다.
그동안 테스트 코드를 작성할 때 given-when-then 기반의 테스트 코드를 작성하지 않았지만,
패턴으로 나눔으로써 개발자가 편리하게 확인할 수 있는 것 같았다.
작성하기 어려운 TC에 난감했던 기억이 있다.
그것은 여러 클래스가 묶여서 어디부터 테스트를 해야 하는지를 정확히 파악하지 못했다는 점이 크게 작용했다.
테스트의 중요한 목적 중 하나는 내가 작성하는 코드에 대해 빠르게 피드백을 받는 것이다.
시작부터 큰 단위의 테스트를 만들게 된다면 작성한 코드에 대한 피드백을 받기까지 많은 시간이 걸린다. 테스트 코드를 작성하기 어렵다면 저와 같이 단순한 테스트임에도 작성해 보는 것을 추천드린다.
문제를 작게 나누고, 그중 핵심 기능에 가까운 부분부터 작게 테스트를 만들어 나가는 것이 중요할 것 같다.
'Back-End > Spring' 카테고리의 다른 글
[MVC-2편] 오류 코드와 메시지 처리 (0) | 2023.04.16 |
---|---|
[MVC-1편] 웹페이지, 타임리프(Thymeleaf) 구성 (0) | 2023.03.22 |
[MVC-1편] 기본 기능, HTTP 요청, 요청 파라미터 (0) | 2023.03.14 |
[MVC-1편] 기본 기능, logging 알아보기 (0) | 2023.03.14 |
[MVC-1편] 동시 요청 - 멀티 쓰레드, 쓰레드 풀 (0) | 2023.03.14 |