inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

상품 도메인 개발

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

367

작성자 없음

작성한 질문수 0

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);

하는거와 같은거 아닌가요?

왜 새로 변수를 만들어주는 것인지 궁금합니다.

초보라 혼란해서 이해가잘안가서요 ㅜ

 

 

 

 

 

 

 

mvc MVC spring

답변 1

2

OMG

안녕하세요. 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가 부여되었는지 확인)

 

감사합니다.

0

Neon

헐 늦은밤 감사합니다.

제가 제목을 잘못 적었네요 죄송합니다. ㅜㅜ

Item item = new Item("itemA", 10000, 10);

Item savedItem = itemRepository.save(item);

save(item) 메소드를 호출한 후에 item 은

savedItem 과 완전히 똑같은거 맞나요?

답변 정말 감사합니다!!

 

 

 

servlet과 container에 대한 질문입니다

0

25

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

64

1

jsp 의존성 수정 요청

0

80

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

78

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

96

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

77

2