경로 : hello.itemservice.domain.item
package hello.itemservice.domain.item;
import org.springframework.stereotype.Repository;
import javax.sound.midi.Sequence;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// Commponente등록(scan 대상)
@Repository
public class ItemRepository {
// Memory 기반 저장소 만들기
// 멀티 쓰레드 환경인 경우 동시성을 고려해 ConcurrentHashMap을 사용하자
private static final Map<Long,Item> store = new HashMap<>();
// id를 1씩 증가하며 등록할 예정 (Server단에서 자동으로)
private static long sequence = 0L;
// saveMethod 만들기
public Item save(Item item){
// id를 자동으로 +1 한 후 등록
item.setId(++sequence);
store.put(item.getId(),item);
return item;
}
// id 로 찾기
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());
}
// 저정소 clear 하기 Test 활용 목적
public void clearStore(){
store.clear();
}
}
🤞 ConcurrentHashMap 참고 : https://applepick.tistory.com/124
package hello.itemservice.domain.item;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
//given
//when
//then
class ItemRepositoryTest {
private 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);
}
@Test
void findById() {
}
@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);
assertThat(result).contains(item1,item2);
}
@Test
void update() {
//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());
}
@Test
void clearStore() {
}
}