πŸš‰

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 인수λ₯Ό μœ μΆ”ν•©λ‹ˆλ‹€.
  • 즉, νƒ€μž…λ§Œ κ°™λ‹€λ©΄ 인수둜 인정 받을 수 μžˆμŠ΅λ‹ˆλ‹€.