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

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 리포지토리 테스트 케이스 작성

assaultThat의 동등성 비교 질문

작성

·

184

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)

[질문 내용]

image.png

findByName()의 테스트 부분을 보면 아무리 봐도 member1의 밸류값과 result의 밸류값이 "spring1"로 동일한데 테스트에 실패했다고 뜹니다

근데 한 가지 의문인 건 테스트 값 결과를 보면 동등성이 아닌 동일성 비교를 하는 거 같은데, MemoryMemberRepository의 store가 HashMap을 사용하기 때문에 equals()와 HashCode()를 재정의 해줘야 하는 걸까요? 강의 내용엔 따로 기재되지 않아 질문합니다!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 유사한 상황에서의 테스트 실패 문제를 해결하기 위한 답변을 찾았습니다. 당신이 직면한 문제는 findByName() 테스트가 실패하는 상황에 대한 것으로, 테스트 결과가 동등성이 아닌 동일성 비교로 나타나고 있음을 지적하셨습니다. 본 문제는 equals()hashCode() 메소드를 재정의 해야 하는지 여부에 대한 질문도 포함하고 있습니다.

해당 질문과 관련하여, 다음 링크의 답변이 도움이 될 수 있습니다:

  • MemoryMemberRepositoryTest에서 findByName()에러 (afterEach()가 안돼요) - 이 질문에서는 findByName() 테스트 시 실패한 사례와 그 해결 방법에 대해 논의합니다. 두 객체(멤버)가 동일해 보이지만 테스트가 실패하는 주요 원인으로 @Test 어노테이션을 잘못 사용하여 발생한 오류를 설명하고 있습니다. Java에서 객체의 동등성 비교를 위해서는 equals()hashCode() 메서드의 적절한 구현이 필요하며, 이는 객체가 논리적으로 동일함을 판단하기 위한 기준을 제공합니다.

강의 내용에서 이 부분이 명시적으로 언급되지 않았다면, 일반적으로 객체의 동등성을 검사하는 테스트를 작성할 때 equals()hashCode() 메소드를 오버라이드하는 것이 권장됩니다. 이는 자바에서 객체 비교 시 동등성을 확실히 보장하기 위한 일반적인 방법입니다.

또한, 여러분이 언급한 MemoryMemberRepositorystoreHashMap을 사용하는 경우, equals()hashCode()를 재정의 함으로써 키의 동등성 비교가 올바르게 수행될 수 있습니다. 이는 HashMap 내에서 키로 사용되는 객체의 동일성 검사를 올바르게 수행하기 위함입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기