테스트코드(5)
-
JAVA 테스트 코드 작성 - 2. 테스트 코드에서 주의할 사항들(TIL)
해당 게시글은 최범균님의 테스트 주도 개발 시작하기와 박우빈님의 실용적인 테스트 강의 내용 중 테스트 코드 작성 주의사항을 정리한 내용입니다. 되게 테스트 상황에 맞는 예시를 생각해내기 어려워서 강의 내용, 개인 테스트 코드, 블로그에서 코드를 가져왔음을 알립니다. 1. 테스트 코드에서 순서는 보장되어 있지 않을 수 있다. 테스트 코드를 짜다보면 성공할 때도 있고 실패할 때도 있는 테스트가 있다. 랜덤 혹은 시간이라는 변수와 관련이 없다면 테스트 코드 혹은 동작하는 코드의 순서 때문에 발생하는 문제일 가능성이 크다. 테스트 코드의 순서 문제로 발생하는 것은 보통 DB와 연관이 있다. 데이터를 제 때 지워주지 않아서 예상했던 조회와 다르다던가하는 문제가 발생한다. 그런 문제가 발생할 때에는 보통 @Afte..
2024.04.10 -
JAVA 테스트 코드 작성 - 1. Mock 사용하기(TIL)
해당 게시글은 최범균님의 테스트 주도 개발 시작하기와 박우빈님의 실용적인 테스트 강의 내용 중 Mock 사용법을 정리한 내용입니다. 되게 테스트 상황에 맞는 예시를 생각해내기 어려워서 강의 내용, 개인 테스트 코드, 블로그에서 코드를 가져왔음을 알립니다. 1. Mock으로 기본 가짜 응답 만들기 DB와 연결된 부분이며 이미 기능적으로 검증이 완료된 부분은 Mock으로 가짜 객체를 만드는 것을 고려해보는 것이 좋다. 왜냐하면, 굉장히 시간이 오래 걸리며 데이터를 주입하고 관리하는 부분이 오히려 가독성을 해치고 관리하기 어렵게 만들기도 하기 때문이다. 과거 컨트롤러 테스트 글을 작성했을 때 요청에 따른 데이터 조회 부분을 Mock으로 대체해서 설정한 값에 따른 응답을 설정해놓은 적이 있었다.// giv..
2024.04.09 -
스프링 테스트 작성 3. 컨트롤러 계층 테스트
1. 컨트롤러, 검증, ExceptionHandler 코드 확인 우선 작성한 컨트롤러 코드부터 확인해보자. 딱 1개의 API만이 있다. 가게를 찾기 위한 요청 정보를 URL의 파라미터로 받아 서비스 계층에서 사용할 수 있는 요청으로 바뀐 뒤, 가게를 찾는다. 이 때, 가게를 찾지 못하면 예외를 던지고 찾으면 상태코드 200과 함께 응답을 던진다. @RestController @RequiredArgsConstructor public class ShopController { private final ShopService shopService; @GetMapping("/api/findShop") public ResponseEntity findShop(@Valid @ModelAttribute ShopSearch..
2024.04.07 -
스프링 테스트 작성 2. 서비스 계층 테스트
[ 서비스 설계 ] 리포지토리 설계 당시 설명을 덜하고 테스트를 하지 않은 쿼리가 하나 있었다. 바로 아래의 쿼리이다. 우선 이렇게 만든 이유는 가게 하나를 가져오는데 조건에 맞는 모든 가게를 한번에 퍼올려서 메모리에서 가져오기 싫어서이다. public Shop findShopBySearchCondAndOffset(ShopSearchCond cond, int offset){ return queryFactory .select(shop) .from(shop) .where( priceBetween(cond), schoolTypesEq(cond), shopTypesIn(cond), timeInOpeningHours(cond) ) .offset(offset) .limit(1L) .fetchOne(); } 어차피 ..
2024.03.29 -
스프링 테스트 작성 1. 도메인과 리포지토리 설계 및 테스트
[ 비즈니스 상황 ] 결과적으로 한 줄 요약하면 학교 주변 식당 추천기이다. 과거에 했었던 프로젝트이고 조금 더 현실적이고 어려운 테스트 상황을 만들기 위해 실시간 옵션과 식당의 시작 시간과 종료 시간이라는 검색 조건을 추가하였다. 이 서비스 상황에 따라 어떻게 설계하고 테스트하며 작성할 지를 Practical Testing: 실용적인 테스트 가이드(인프런 박우빈) 강의를 들으며 배운 내용을 토대로 작성을 해보고자 한다. 사용될 기술은 MySQL, H2, Spring boot 2.7.16, Jpa, Querydsl로 과거 프로젝트는 타임리프로 제작했지만 이번엔 Restful하게 제작할 예정이다. [ 도메인 설계 ] 단순 추천 시스템이기 때문에 테이블은 딱 1개만 존재한다. 테이블 내부에는 식당의 이름, ..
2024.03.28