본문 바로가기
💻 뚝딱뚝딱/북북클럽

[개발일지#003] 타임라인(TimeLIne) 도메인 생성 및 테스트

by 뚜루리 2024. 1. 12.
728x90
320x100
[참고]
김영한님 스프링 강의를 바탕으로 진행되는 토이프로젝트의 과정을 기록하는 글입니다. 
둥근 피드백은 언제나 환영입니다.
[오늘의 개발내용]
1. 타임라인 도메인 생성 (TimeLIne, TimeLineRepository)
2. 생성된 타임라인 도메인을 junit을 통해 테스트 해봄 (TimeLineRepositoryTest)

 

 

간단 요구사항 (Timeline)

타임라인 도메인

  • 타임라인아이디
  • 회원아이디
  • 책아이디
  • 책이미지
  • 내용
  • 마지막수정일

 

타임라인 관리기능

  • 타임라인 등록
  • 타임라인 상세
  • 타임라인 수정 (삭제는 논리적 삭제)

 


 

1. 타임라인 도메인 생성 (TimeLIne)

package toyproject.bookbookclub.domain.Timeline;

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class Timeline {

    private String timelimeId;
    private String bookId;
    private String bookImg;
    private String memberId;
    private String content;
    private String lastUpdateDate;

    public Timeline() {
    }


    //save
    public Timeline(String timelimeId, String bookId, String bookImg, String memberId, String content, String lastUpdateDate) {
        this.timelimeId = timelimeId;
        this.bookId = bookId;
        this.bookImg = bookImg;
        this.memberId = memberId;
        this.content = content;
        this.lastUpdateDate = lastUpdateDate;
    }

}

 

1. 타임라인 도메인 생성 (TimeLineRepository)

package toyproject.bookbookclub.domain.Timeline;

import org.springframework.stereotype.Repository;
import toyproject.bookbookclub.domain.Members.Member;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Repository
public class TimeLineRepository {

    private static final Map<String, Timeline> store = new ConcurrentHashMap<>(); //static 사용

    public Timeline save(Timeline timeline){
        store.put(timeline.getTimelimeId(), timeline);
        return timeline;
    }

    public Timeline findByTimelineId(String timeLineId){
        return store.get(timeLineId);
    }

    public List<Timeline> findAll(){
        return new ArrayList<>(store.values());
    }

    public void update(String timelineId, Timeline updateParam){
        Timeline timeline = findByTimelineId(timelineId);
        timeline.setContent(updateParam.getContent());
        timeline.setLastUpdateDate(updateParam.getLastUpdateDate());
    }

    public void clearStore(){
        store.clear();
    }

}

 

 

[기본생성자는 왜 사용하는가] 에 대한 내용을 잘 정리한 블로그가 있어 주소를 첨부함. 

https://colour-my-memories-blue.tistory.com/16

 

[Java] 기본 생성자가 필요한 '진짜' 이유 (리플렉션 오해 바로 잡기!!!)

'기본 생성자가 필요한 이유'라고 검색해보면 여러 블로그에서 하나같이 하는 소리가 있다. 기본 생성자가 필요한 이유는 Reflection API로 가져올 수 없는 정보 중 하나가 생성자의 인자 정보이기

colour-my-memories-blue.tistory.com

 

 

 

 

2. 생성된 타임라인 도메인을 junit을 통해 테스트 해봄 (TimeLineRepositoryTest)

package toyproject.bookbookclub.domain.Timeline;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;

class TimeLineRepositoryTest {

    TimeLineRepository timeLineRepository = new TimeLineRepository();

    @AfterEach
    void afterEach(){ timeLineRepository.clearStore();}

    @Test
    void save(){
        //given
        Timeline timeline = new Timeline("1", "bookid", "bookImg", "memberId", "contnet", "2024-01-01");

        //when
        Timeline saveTimeline = timeLineRepository.save(timeline);

        //then
        //option + enter : assert 단축
        Timeline findTimeline = timeLineRepository.findByTimelineId(timeline.getTimelimeId());
        assertThat(findTimeline).isEqualTo(timeline);

    }

    @Test
    void findAll(){

        //gvien
        Timeline timeline1 = new Timeline("1", "bookid1", "bookImg1", "memberId1", "contnet1", "2024-01-01");
        Timeline timeline2 = new Timeline("2", "bookid2", "bookImg2", "memberId2", "contnet2", "2024-01-02");
        timeLineRepository.save(timeline1);
        timeLineRepository.save(timeline2);

        //when
        List<Timeline> result = timeLineRepository.findAll();

        //then
        Assertions.assertThat(result.size()).isEqualTo(2);

    }

    @Test
    void updateTimeline(){
        //given
        //저장할 데이터 생성
        Timeline timeline = new Timeline("1", "bookid1", "bookImg1", "memberId1", "contnet1", "2024-01-01");

        //저장
        Timeline savedTimeline = timeLineRepository.save(timeline);
        //저장된 데이터의 타임라인 아이디 가져옴
        String timelineId = savedTimeline.getTimelimeId();

        //when
        //업데이트 할 데이터 생성
        Timeline updateParam = new Timeline("1", "bookid1", "bookImg1", "memberId1", "contnet2", "2024-01-01");

        //업데이트
        timeLineRepository.update(timelineId, updateParam);

        //저장한 데이터의 타임라인 데이터 가져옴
        Timeline findId = timeLineRepository.findByTimelineId(timelineId);

        //then
        Assertions.assertThat(findId.getContent()).isEqualTo(updateParam.getContent());

    }

}

 

 

728x90
320x100