판매 할 상품을 등록, 수정하여 목록을 볼 수 있는 상품 관리 서비스를 만들어보자
도메인 모델
- 상품 ID
- 상품명
- 가격
- 수량
4가지 기능
- 상품 목록
- 상품 등록
- 상품 수정
- 상품 상세
상품 도메인 개발
Item - 상품 객체
@Getter @Setter
public class item {
private Long id;
private String itemName;
private Integer price; //Integer은 null일 가능성이 있기때문
private int quantity;
//기본 생성자
public item() {
}
public item(String itemName, Integer price, int quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
* @Data 를 쓰게 되면 getter,setter,required,Tostring...다 만들어줘서 위험하니까 필요한 getter,setter 만 쓴다
ItemRepository - Item 저장소
@Repository //@Component 가 포함돼있어 컴포넌트 대상이 된다
public class ItemRepository {
//Map<Long, Item> 상품의 id를 키로 사용하여 상품을 빠르게 검색하고 접근하기 위해
private static final Map<Long, Item> store = new HashMap<>(); //static
private static long sequence = 0L; //static
//저장
public Item save(Item item) {
item.setId(++sequence);
store.put(item.getId(),item);
return item;
}
//조회
public Item findById(Long id){
return store.get(id);
}
//전체 조회
public List<Item> findAll(){
return new ArrayList<>(store.values());
}
//업데이트
public void update(Long itemId, Item updateParam){
Item findItem = findById(itemId);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
//테스트용 해시맵 데이터 날리기
public void clearStore(){
store.clear();
}
}
테스트용 클래스 만들기
ItemRepositoryTest
ItemRepository 클래스에 클릭하고 ctrl + shift + T 하면 테스트용 자동완성이 된다 (JUnit5 라이브러리로 하기!)
먼저 저장 테스트
class ItemRepositoryTest {
ItemRepository itemRepository = new ItemRepository();
//테스트 끝날때마다 실행해준다 (깔끔하게 지워주기)
@AfterEach
void afterEach() {
itemRepository.clearStore();
}
@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); //조회한값=저장된값 테스트
}
}
import org.assertj.core.api.Assertions;
Assertions.assertThat(findItem).isEqualTo(savedItem);
Assertions 에 커서를 두고 alt + enter 해서 Add on-demand~~ 클릭하면 앞으로 Assertions 생략해도 된다.
두번째 전체 조회 테스트
@Test
void findAll(){
//given
Item item1 = new Item("item1",10000,10);
Item item2 = new Item("item2",20000,20);
itemRepository.save(item1);
itemRepository.save(item2);
//when
List<Item> result = itemRepository.findAll();
//then
assertThat(result.size()).isEqualTo(2); //2개가 맞는지
assertThat(result).contains(item1,item2); //item1과 item2 가 있는지
}
테스트 동작해보기
색체크가 나오면 잘 동작한다는것!
세번째 업데이트 테스트 해보고 정상동작하는지 실행해보기
@Test
void updateItem(){
//given
Item item = new Item("item1",10000,10);
Item savedItem = itemRepository.save(item);
Long itemid = savedItem.getId();
//when
Item updateParam = new Item("item2", 20000, 20);
itemRepository.update(itemid,updateParam);
//then
Item findItem = itemRepository.findById(itemid);
assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
}
반응형
LIST
'Spring MVC 웹페이지 만들기' 카테고리의 다른 글
Spring MVC | (4) 상품 수정, 리다이렉트 (0) | 2024.04.02 |
---|---|
Spring MVC | (3) 상품 등록, @ModelAttribute 와 @RequestParam 차이점 (0) | 2024.04.01 |
Spring MVC | (2) 상품 상세 , 타임리프 (0) | 2024.03.31 |
Spring MVC | (1) 상품 목록, 뷰 템플릿 , 타임리프 (0) | 2024.03.27 |
Spring MVC | 프로젝트 생성 및 설정 , 웰컴 페이지 생성 (0) | 2024.03.27 |