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

작성자 없음

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

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

상품 도메인 개발

테스트에서 assertThat 항상 같은 값나오는게 아닌가 궁금합니다.

작성

·

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

안녕하세요. C베로님, 공식 서포터즈 OMG입니다.
.

테스트 메서드 이름을 보면 @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 과 완전히 똑같은거 맞나요?

답변 정말 감사합니다!!

 

 

 

작성자 없음

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

질문하기