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

김준하님의 프로필 이미지
김준하

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 기능 테스트

assertEquals 질문드립니다.

작성

·

262

0

안녕하세요.

동영상강의 8분 40초에 

assertEquals(member, memberRepository.findOne(savedId));

이 부분에서 fail 결과가 나옵니다.

java.lang.AssertionError: 

Expected :com.example.shop.domain.Member@83912203

Actual   :com.example.shop.domain.Member@4740f07

서로 객체 hashcode가 달라 발생하는 것이라 판단해 Member 와 Address 클래스에 각각  equals 와 hashcode를 override 했습니다.

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
return Objects.equals(id, member.id) &&
Objects.equals(name, member.name) &&
Objects.equals(address, member.address) &&
Objects.equals(orders, member.orders);
}

그럼에도 불구하고 제대로 값을 비교하지 못하고있습니다. 

무슨 문제가 있어 fail 이 발생하는지 궁금합니다.

답변 3

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 김준하님

다른 객체가 조회되는 것을 보니 테스트 코드에 트랜잭션이 재대로 안걸려 있는 것 같아요^^

같은 트랜잭션 범위여야 같은 영속성 컨텍스트가 유지되고, 같은 영속성 컨텍스트가 유지되어야 같은 객체가 조회되거든요.

@Transactional을 패키지 정보 포함해서, 확인해보시고 그래도 잘 안되면, 테스트 코드 전체를 답글로 남겨주세요^^

감사합니다.

0

김영한님의 프로필 이미지
김영한
지식공유자

잘 해결되어서 다행입니다^^

0

김준하님의 프로필 이미지
김준하
질문자

소스코드를 살펴보니 말씀하신대로 @Transactional annotation이 빠져있었습니다.

답변해주셔서 감사합니다.

김준하님의 프로필 이미지
김준하

작성한 질문수

질문하기