컨트롤러단 NotFound 테스트는 어떻게 하나요?
@DisplayName("요청 게시물 ID에 해당하는 게시물이 반드시 존재해야 한다.")
@Test
void postDetailWithNonExistPostId() throws Exception {
//given
//when
ResultActions result = mvc.perform(get("/api/posts/{id}", 2000));
//then
result
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.status").value("fail"))
.andExpect(jsonPath("$.message").value("해당 게시물을 찾을 수 없습니다."))
.andDo(print());
}MockMvc로 컨트롤러 테스트를 하고 있습니다.
게시물을 조회하는데 id에 해당하는 게시물이 없다면 제가 직접 정의한 EntityNotFoundException이 발생하게 구현했습니다. 이 익셉션이 발생하면 400에러가 발생됩니다.
테스트 할 때 id 값을 엉뚱하게 2000으로 주는데 아래와 같이 200OK 가 뜨면서 null 값으로 가져오더라고요. 가져온 게시물은 null 값이면서 왜 id 2000의 게시물이 존재한다고 판단하고 정상적으로 동작하는걸까요?
위와 같은 NotFound 예외처리 테스트할 땐 어떤식으로 해야될까요?
답변 1
1
안녕하세요. gelab님, 공식 서포터즈 y2gcoder입니다.
테스트 작성 스타일은 모두 다르고, 저 또한 테스트 코드를 잘 짜는 사람은 아니기 때문에 참고만 해주십쇼!
말씀해주신 사항을 들어봤을 때, 본질적으로는 이 테스트 케이스는 통합 테스트 내지는 서비스 단위 테스트로 이관해야할 것 같다고 생각했습니다.
왜냐하면 비즈니스 로직을 통해 해당 id를 가진 post가 존재하지 않는다는 것을 체크해야 하기 때문입니다. 이는 서비스단에서 담당하는 역할이라고 생각하기 때문입니다. 그래서 해당 id를 가진 post가 존재하는지를 체크하는 것이 해당 테스트 케이스의 본질이라고 생각하고 서비스 단위 테스트 코드를 짜는 것이 맞다고 생각합니다. 아니면 @SpringBootTest를 이용해서 서비스, 리포지토리까지 모두 사용하는 테스트 코드를 짜는 것이 맞다고생각합니다.
감사합니다.
sdk 설정 오류
0
53
2
오탈자 - @Transactional
0
56
1
src/test/resources 테스트 경로 문제
0
50
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
64
1
MemberRepositoryTest 실행오류
0
81
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
183
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
142
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
51
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
71
1
기본 생성자
0
60
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
103
1
멤버서비스테스트 부분에서 막힙니다.
0
165
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
116
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
120
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
114
1
24분 27초 연관관계 편의 메서드 위치
0
113
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
109
2
빌드 툴, Gradle
0
59
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
77
2
Repository에서 EntityManager 주입 방식 차이
0
90
1
롬복과 사용자 정의 setter 메서드
0
73
1
주문 목록 조회 fetch join 질문드립니다
0
82
1
dirty checking 질문드립니다.
0
83
1
동시성 관련 질문입니다
0
75
1





