작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
309
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 네
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
네
[질문 내용]
여기에 질문 내용을 남겨주세요.
상품 도메인 개발 12분 에
ItemRepositoryTest 안에 @Test void save() 메소드를 보면
public Item save(Item item) {
item.setId(++sequence);
store.put(item.getId(), item);
return item;
}
@Test
void save() {
//given
Item item = new Item("itemA", 10000, 10);
//when
Item savedItem = itemRepository.save(item);
//then
Item findItem = itemRepository.findById(item.getId());
assertThat(findItem).isEqualTo(savedItem);
}
Item item 객체생성을 하고 itemRepository.save(item);
리포지터리save메소드를 호출해서
id 값 set하고 map에저장하고 item 을 그대로 반환하자나요
그리고 test save() 에서 Item savedItem 으로 받고요
그럼 savedItem 은 item 을 참조하는거 아닌가요?
savedItem 을 받지 않고 그냥 item 을 사용하는거와 다른가요?
예를들어
assertThat(findItem).isEqualTo(savedItem);
대신
assertThat(findItem).isEqualTo(item);
하는거와 같은거 아닌가요?
왜 새로 변수를 만들어주는 것인지 궁금합니다.
초보라 혼란해서 이해가잘안가서요 ㅜ
답변 1
2
테스트 메서드 이름을 보면 @Test void save()로 세이브 기능을 테스트 하기 위함입니다.
그렇다면 save()가 잘 동작하는지를 봐야합니다.
이 부분을 save가 아닌 단순한 addOne() 메서드를 예시로 들면,
addOne(int param)은 param으로 받은 인자의 값을 1을 더해서 반환하는 메서드입니다.
int addOne(int param) {
return param + 1;
}
위 메서드는 이해 될거라 생각합니다.
이 addOne()이 정상작동하는지 확인해보겠습니다.
간단히 1을 넣는다고 한다면 2를 반환하겠죠?
void addOneTest() {
int one = 1;
int expected = addOne(one);
}
addOneTest라는 메서드를 만들었습니다. .
addOne()이 정상작동하는지 검증하려면 리턴 변수 expected를 검증해야합니다.
save()도 이와 동일합니다.
그리고 이 부분도 같이 보시면 이해가 되실텐데요
Item item = new Item("itemA", 10000, 10);
이렇게 Item이 생성되는 시점에서는 item의 id가 없습니다.
하지만 save()가 정상 동작했다면 save()의 로직으로 인해 item에 id가 부여됩니다.
Item findItem = itemRepository.findById(item.getId());
그렇기 때문에 ItemRepository에서 findById로 item의 id로 조회됩니다.(정상적으로 저장되고 해당 아이템에 id가 부여되었는지 확인)
감사합니다.
헐 늦은밤 감사합니다.
제가 제목을 잘못 적었네요 죄송합니다. ㅜㅜ
Item item = new Item("itemA", 10000, 10);
Item savedItem = itemRepository.save(item);
save(item) 메소드를 호출한 후에 item 은
savedItem 과 완전히 똑같은거 맞나요?
답변 정말 감사합니다!!