Instagram-Clone-Coding / Spring_instagram-clone

Instagram Clone Coding - Backend using Spring Framework
http://ec2-52-79-71-191.ap-northeast-2.compute.amazonaws.com
MIT License
80 stars 23 forks source link

BlockService 리팩토링 및 테스트 작성 #214

Closed vectorch9 closed 2 years ago

vectorch9 commented 2 years ago

Feature Description

Todo list

vectorch9 commented 2 years ago

@seonpilKim BlockService내에 다음과 같은 코드가 있습니다.

if (member.getId().equals(blockMember.getId())) {
    throw new BlockMyselfFailException();
}

원랜 다음과 같이 단순히 mocking을 하여 코딩을 하고 있었는데, 생각해보니 member.getId()를 호출하는 경우에 문제가 생기더라구요. Entity의 Id는 직접 수정 할 수 없어서 어떻게 처리할지 고민중인데 어떤 방법이 좋을까요? 떠오르는게 리플렉션밖에 없는데 리플렉션 사용이 적절한 상황일지 모르겠습니다.

// given
final long memberId = 1L;
final long targetId = 2L;
final Member member = MemberUtils.newInstance();
final Member target = MemberUtils.newInstance();

given(authUtil.getLoginMember()).willReturn(member);
given(memberRepository.findById(memberId)).willReturn(Optional.of(member));
given(memberRepository.findById(targetId)).willReturn(Optional.of(target));
given(memberRepository.findByUsername(target.getUsername())).willReturn(Optional.of(target));
seonpilKim commented 2 years ago
ReflectionTestUtils.setField(member, "id", memberId);

그럴 때는 이런식으로 많이 사용하는 것으로 알고 있습니다.

vectorch9 commented 2 years ago
ReflectionTestUtils.setField(member, "id", memberId);

그럴 때는 이런식으로 많이 사용하는 것으로 알고 있습니다.

음.. 그냥 리플렉션을 쓰는군요