TACO 프로젝트 회고록(2023-04-11)

윤현우·2023년 4월 11일
0
post-thumbnail

2023-04-11 화

오늘은 PostRepository와 PostService의 테스트를 진행하였다.

아직 게시글 수정 테스트는 하지 않았고, CRUD중 Create, Read 그리고 Delete에 대한 테스트만 작성하였다.

Repository 테스트

게시글 저장 테스트

@Test
@Transactional
void savePost() {
        //when
        PostEntity post = PostEntity.builder()
                .title("first title")
                .description("first description")
                .postDong("상현동")
                .postSido("용인시")
                .postGugun("수지구")
                .postLanguage("java")
                .build();
              
        //given
        PostEntity result = postRepository.save(post);
        
        //then
        assertThat(post.getId()).isEqualTo(result.getId());
        assertThat(post.getTitle()).isEqualTo(result.getTitle());
        assertThat(post.getDescription()).isEqualTo(result.getDescription());
        assertThat(post.getPostSido()).isEqualTo(result.getPostSido());
        assertThat(post.getPostGugun()).isEqualTo(result.getPostGugun());
        assertThat(post.getPostDong()).isEqualTo(result.getPostDong());
        assertThat(post.getPostLanguage()).isEqualTo(result.getPostLanguage());

}

게시글 저장의 레파지토리 테스트이다.

나중에 DTO 클래스도 만들어 글쓰기및 수정할때 사용할 것이지만 지금 테스트는 레파지토리에 대한 테스트이기 때문에 사용하지 않았다.

가장 먼저 Entity하나를 만들어 레파지토리에 저장이 잘 되는지 테스트 하였다.

레파지토리의 테스트는 대부분 이런 식이다. 테스트 데이터를 만들어 결과를 확인하는 방법이다.

게시글 리스트 테스트

    @Test
    @Transactional
    void postList(){
        //when
        PostEntity post1= PostEntity.builder()
        .title("first title")
        .description("first description")
        .postSido("용인시")
        .postGugun("수지구")
        .postDong("상현동")
        .postLanguage("java")
        .build();

        PostEntity post2 = PostEntity.builder()
        .title("second title")
        .description("second description")
        .postSido("서울특별시")
        .postGugun("강남구")
        .postDong("서초동")
        .postLanguage("java")
        .build();

        //given
        postRepository.save(post1);
        postRepository.save(post2);

        List<PostEntity> list = postRepository.findAll();

        //then
        assertThat(list.size()).isEqualTo(2);
    }

게시글 상세 테스트

    @Test
    @Transactional
    void findPost() {
        //when
        PostEntity post = PostEntity.builder()
        .title("first title")
        .description("first description")
        .postSido("용인시")
        .postGugun("수지구")
        .postDong("상현동")
        .postLanguage("java")
        .build();

        //given
        postRepository.save(post);
        Optional<PostEntity> result = postRepository.findById(1L);

        //then
        assertThat(post.getTitle()).isEqualTo(result.get().getTitle());
        assertThat(post.getDescription()).isEqualTo(result.get().getDescription());
        assertThat(post.getPostSido()).isEqualTo(result.get().getPostSido());
        assertThat(post.getPostGugun()).isEqualTo(result.get().getPostGugun());
        assertThat(post.getPostDong()).isEqualTo(result.get().getPostDong());
        assertThat(post.getPostLanguage()).isEqualTo(result.get().getPostLanguage());
    }

게시글 삭제 테스트

    @Test
    @Transactional
    void deletePost() {
        //when
        PostEntity post = PostEntity.builder()
        .title("first title")
        .description("first description")
        .postSido("용인시")
        .postGugun("수지구")
        .postDong("상현동")
        .postLanguage("java")
        .build();

        //given
        postRepository.save(post);
        postRepository.deleteById(1L);

        //then
        assertThat(postRepository.findById(1L)).isEmpty();
    }

레파지토리 테스트를 통해 서비스 테스트도 진행하였다.

Service 테스트

게시글 저장 테스트

	@Test
    @Transactional
    void savePost() {
        //when
        PostDto post = PostDto.builder()
                .title("first title")
                .description("first description")
                .postDong("상현동")
                .postSido("용인시")
                .postGugun("수지구")
                .build();
              
        //given
        PostEntity result = postService.save(post);

        Optional<PostEntity> expect = postRepository.findById(1L);
        
        //then
        assertThat(expect.get().getId()).isEqualTo(result.getId());
        assertThat(post.getTitle()).isEqualTo(result.getTitle());
        assertThat(post.getDescription()).isEqualTo(result.getDescription());
        assertThat(post.getPostSido()).isEqualTo(result.getPostSido());
        assertThat(post.getPostGugun()).isEqualTo(result.getPostGugun());
        assertThat(post.getPostDong()).isEqualTo(result.getPostDong());

    }

Service부분을 테스트하기 위해서는 PostService의 코드가 필요하다.

이 코드는 서비스 계층을 통한 게시글을 저장하기 위한 테스트이다.

public PostEntity save(PostDto postDto) {
        PostEntity postEntity = postDto.toEntity();
        PostEntity saved = postRepository.save(postEntity);

        return saved;
    }

위 코드는 게시글 저장을 위한 service클래스의 메소드이다.

서비스 부분에서는 DTO를 사용해 DTO를 Entity로 변경후 저장하는 서비스를 만들었다.

게시글 리스트 테스트

	@Test
    @Transactional
    void postList(){
        //when
        PostDto post1= PostDto.builder()
        .title("first title")
        .description("first description")
        .postSido("용인시")
        .postGugun("수지구")
        .postDong("상현동")
        .build();

        PostDto post2 = PostDto.builder()
        .title("second title")
        .description("second description")
        .postSido("서울특별시")
        .postGugun("강남구")
        .postDong("서초동")
        .build();

        //given
        postService.save(post1);
        postService.save(post2);   

        List<PostEntity> list = postService.readAll();

        //then
        assertThat(list.size()).isEqualTo(2);
    }
public List<PostEntity> readAll(){
        List<PostEntity> list = postRepository.findAll();

        return list;
    }

게시글 상세 테스트

@Test
    @Transactional
    void findPost() {
        //when
        PostDto post = PostDto.builder()
        .title("first title")
        .description("first description")
        .postSido("용인시")
        .postGugun("수지구")
        .postDong("상현동")
        .build();

        //given
        postService.save(post);
        Optional<PostEntity> result = postService.read(1L);

        //then
        assertThat(post.getTitle()).isEqualTo(result.get().getTitle());
        assertThat(post.getDescription()).isEqualTo(result.get().getDescription());
        assertThat(post.getPostSido()).isEqualTo(result.get().getPostSido());
        assertThat(post.getPostGugun()).isEqualTo(result.get().getPostGugun());
        assertThat(post.getPostDong()).isEqualTo(result.get().getPostDong());
    }
public Optional<PostEntity> read(Long postId) {
        Optional<PostEntity> post = postRepository.findById(postId);

        return post;
	}

게시글 삭제 테스트

@Test
    @Transactional
    void deletePost() {
        //when
        PostDto post = PostDto.builder()
        .title("first title")
        .description("first description")
        .postSido("용인시")
        .postGugun("수지구")
        .postDong("상현동")
        .build();

        //given
        postService.save(post);
        postRepository.deleteById(1L);

        //then
        assertThat(postRepository.findById(1L)).isEmpty();
    }
public void delete(Long postId) {
        postRepository.deleteById(postId);
	}

아직 TDD 환경에 적응하지 못해 완벽하지는 않은 것 같다.

앞으로 프로젝트를 진행하면서 좀 더 발전한 테스트를 만들고 싶다.

profile
개발자가 되는 그날까지

0개의 댓글