단위 테스트 공부하는 중인데요, 자료마다 mock stub fake spy 이런 용어가 섞여 나와서 헷갈립니다. 저는 그냥 진짜 객체 대신 넣는 가짜는 다 mock이라고 불러왔거든요.


예를 들어 이런 식으로 정해진 값 돌려주게 만든 것도 mock이라 했고요.


when(repo.findById(1)).thenReturn(user)


호출이 됐는지 확인하는 이런 것도 mock이라 불렀어요.


verify(mailer, times(1)).send(any())


근데 팀 코드 리뷰에서 이건 stub이지 mock이 아니라는 지적을 받았어요. 인메모리로 대충 구현한 가짜 저장소는 또 fake라고 하더라고요. 셋이 정확히 뭐가 다른 건지, 언제 무엇을 써야 하는지 정리해주실 분 있을까요?