添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

인프런 커뮤니티 질문&답변

kwpark96님의 프로필 이미지
kwpark96

작성한 질문수

Mock에 Stubbing 중 발생하는 에러

안녕하세요 백기선님, 강의 재밌게 잘 듣고 있습니다!

강의를 듣고 개인 프로젝트를 공부하는 도중 적용하다가 문제가 발생했는데, 이유를 여쭙고 싶어서 이렇게 질문을 남기게 되었습니다.

<테스트하려는 메서드>

<테스트 메서드>

<ChatRoom 엔티티>

<에러 내용 중 일부>

``` shell

Strict stubbing argument mismatch. Please check:

- this invocation of 'save' method:

chatRoomRepository.save(

com.example.practice.chatRoom.ChatRoom@252f626c

-> at com.example.practice.chatRoom.ChatRoomService.createChatRoom(ChatRoomService.java:39)

- has following stubbing(s) with different arguments:

1. chatRoomRepository.save(

com.example.practice.chatRoom.ChatRoom@20e6c4dc

위와 같이, ChatRoomRepository(JpaRepository 상속)의 save() 메서드를 Stubbing 하는 과정에서 문제가 발생했습니다.

테스트하려는 메서드( createChatRoom (Member loginMember , ChatRoomRequest chatRoomRequest) ))  내부에서 chatRoomRepository.save() 메서드에 매개변수로 생성자를 바로 넣어줘서 그런걸까요?

원인을 잘 모르겠습니다.. 😭

추가적인 질문으로, 테스트하려는 `createChatRoom()` 메서드는 보시는 바와 같이 `chatRoom`을 생성하고, `Boolean` 값을 리턴합니다. 하지만 테스트 코드의 경우 대부분 리턴값이나 발생하는 예외클래스에 의존하기에, 보통 서비스 레이어의 메서드에서 이러한 `Boolean` 값은 의미가 덜하다는 느낌을 받았습니다.

서비스 레이어의 메서드에서는 보통 특정 도메인에 관련된 객체나 컬렉션 등을 반환하는게 더 좋은 코드일까요?

질문 읽어주셔서 감사합니다. 좋은 주말 되세요 :)

답변 1

3

백기선님의 프로필 이미지
백기선
지식공유자

2022. 02. 15. 04:36

Strict stubbing argument mismatch. Please check:

- this invocation of 'save' method:

chatRoomRepository.save(

com.example.practice.chatRoom.ChatRoom@252f626c

이 메시지가 핵심입니다. 메시지의 뜻은 아규먼트가 일치하지 않는다는 것입니다. 목킹할 때 save에 넘겨준 아규먼트와 실제로 save를 호출하면서 넘겨준 chatroom이 일치하지 않는 것이죠. 의심하고 계신대로, 소스 코드에서는 new를 사용해서 새로운 인스턴스를 만들었기 때문에, 목킹할 때 사용한 아규먼트와 일치하지 않아서 발생할 에러입니다.

어떤 타입의 ChatRoom 인스턴스를 받는지 상관없이 내가 미리 만들어둔 chatRoom을 리턴하게 목킹하고 싶다면 any()를 사용해 보세요.

kwpark96님의 프로필 이미지
kwpark96
질문자

2022. 02. 15. 09:25

오 그렇군요 답변 정말 감사드립니다! 혹시 질문 내용 후반에 있는 추가적인 질문에도 의견 주실 수 있으실까요?