지난번에 이어 이번에는 상품 도메인을 개발해본다.
[Spring] MVC 패턴을 적용한 간단한 웹 페이지 만들기 - 1
상품을 관리할 수 있는 간단한 서비스를 구현 해보자 !이번에는 요구 사항을 분석하고, 어떤 흐름으로 개발할지를 먼저 살펴 본다.요구 사항 분석상품 도메인 모델상품은 다음 필드를 가져야 한
bdisappointed.tistory.com
상품 도메인 개발
상품 객체 - Item
package hello.itemservice.domain.item;
import lombok.Data;
@Data
public class Item {
private Long id;
private String itemName;
private Integer price; // price 가 없을 수도 있다는 가정 -> Integer
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
상품 저장소
편의상 여기선 메모리 저장소를 사용하겠다.
package hello.itemservice.domain.item;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Repository
public class ItemRepository {
private static Map<Long, Item> store = new HashMap<>(); // static
private static long sequence = 0L;
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();
}
}
상품 저장소 테스트 코드 작성
package hello.itemservice.domain.item;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
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(savedItem).isEqualTo(findItem);
}
@Test
void findAll() {
// given
Item item1 = new Item("itemA", 10000, 10);
Item item2 = new Item("itemB", 20000, 20);
itemRepository.save(item1);
itemRepository.save(item2);
// when
List<Item> result = itemRepository.findAll();
// then
assertThat(result.size()).isEqualTo(2);
assertThat(result).contains(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, 30);
itemRepository.update(itemId, updateParam);
Item findItem = itemRepository.findById(itemId);
// then
assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
}
}
생성, 조회, 수정 테스트를 구현 했다. 결과는 모두 성공 !
'Project > Web' 카테고리의 다른 글
[Spring] MVC 패턴 웹 페이지 6 - 상품 등록 처리하기 @ModelAttribute (0) | 2025.06.25 |
---|---|
[Spring] MVC 패턴 웹 페이지 5 - 상품 등록 폼 (0) | 2025.06.25 |
[Spring] MVC 패턴 웹 페이지 4 - 상품 상세 페이지 (0) | 2025.06.25 |
[Spring] MVC 패턴 웹 페이지 3 - HTML, 그리고 Thymeleaf (0) | 2025.06.25 |
[Spring] MVC 패턴 웹 페이지 1 - 요구사항 분석 (0) | 2025.06.24 |