HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
인스타뀨램
인스타뀨램
/
🌏
Issue
/
🚉
MOCK Test
🚉

MOCK Test

태그
Post
상태
완료
작성자
속성

에러 상황

  • postService에서 create mock 테스트를 하는 중에 발생한 에러입니다.
notion image

기존 테스트 코드

@Test @DisplayName("Post를 작성할 수 있다.") void create() throws IOException { Post post = Post.builder() .id(1L) .content("새로운 게시글입니다.") .member(MEMBER) .build(); MockMultipartFile mockFile = new MockMultipartFile("image", "C-9vgadUAAAKE1w.jpg", ".png", new FileInputStream(System.getProperty("user.dir") + "/picture/C-9vgadUAAAKE1w.jpg")); List<MultipartFile> images = List.of(mockFile); PostImage image = PostImage.builder() .post(post) .originalFileName(mockFile.getOriginalFilename()) .serverFileName(UUID.randomUUID() + "." + FilenameUtils.getExtension(mockFile.getOriginalFilename())) .path(System.getProperty("user.dir") + "/picture/") .size(mockFile.getSize()) .build(); Map<PostImage, MultipartFile> postImagesMap = Map.of(image, mockFile); PostResponse.CreateResponse createResponse = new PostResponse.CreateResponse(1L, MEMBER.getId(), post.getContent()); given(memberGiver.findById(MEMBER.getId())).willReturn(MEMBER_RESPONSE); given(postConverter.toMember(MEMBER_RESPONSE)).willReturn(MEMBER); // 문제의 코드 given(postRepository.save(post)).willReturn(post); given(postConverter.toPostImages(images, post)).willReturn(postImagesMap); willDoNothing().given(postImageService).save(postImagesMap.keySet()); //when PostResponse.CreateResponse response = postService.create(MEMBER.getId(), post.getContent(), images); //then assertThat(response).isEqualTo(createResponse); }

문제가 생긴 부분의 postService 코드

Post savedPost = postRepository.save( Post.builder() .content(content) .member(member) .build() );

원인

  • given(postRepository.save(post)) 파라미터 post와 실제 service에서 돌아가는 postRepository.save(post)의 파라미터 post가 동등성은 같지만 동일성은 달라서 생기는 오류였습니다.

해결

 
given(postRepository.save(any())).willReturn(post); // 수정한 코드
  • Java 8부터 인수 없는 any 메소드를 사용할 수 있으며 컴파일러에서 type 인수를 유추합니다.
  • 즉, 타입만 같다면 인수로 인정 받을 수 있습니다.