@DisplayName("PostService 테스트")classPostServiceTest{privatePostService postService;privateFakePostRepository postRepository;@BeforeEachvoidsetUp(){ postRepository =newFakePostRepository(); postService =newPostService(postRepository);}@Test@DisplayName("게시글을 생성하면 ID가 부여된 게시글을 반환한다")voidcreatePost_success(){// GivenCreatePostCommand command =newCreatePostCommand("제목","내용","DRAFT");// WhenPost post = postService.create(command);// ThenassertThat(post.getId()).isNotNull();assertThat(post.getTitle()).isEqualTo("제목");assertThat(post.getStatus()).isEqualTo("DRAFT");}@Test@DisplayName("존재하지 않는 게시글 조회 시 ResourceNotFoundException이 발생한다")voidfindById_notFound_throwsException(){// GivenLong nonExistentId =999L;// When & Then (예외 검증)assertThatThrownBy(()-> postService.findById(nonExistentId)).isInstanceOf(ResourceNotFoundException.class).hasMessageContaining("999");}}
@WebMvcTest(PostController.class)classPostControllerTest{@AutowiredprivateMockMvc mockMvc;@MockBeanprivatePostUseCase postUseCase;@Test@DisplayName("[GET] /api/posts/{id} - 정상 조회 시 200 OK")voidgetPost_success()throwsException{// Givenlong postId =1L;PostResponse response =newPostResponse(postId,"제목","PUBLISHED");given(postUseCase.findById(postId)).willReturn(response);// When & Then mockMvc.perform(get("/api/posts/{id}", postId).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(jsonPath("$.id").value(postId)).andExpect(jsonPath("$.title").value("제목")).andDo(print());}}