본문 바로가기
카테고리 없음

[스프링 테스트]포스트를 생성하고 조회하는 테스트

by 근즈리얼 2023. 3. 27.
728x90

숨고 클론 코딩  프로젝트를 진행하면서 꼭 해야지 했던 것이 테스트 코드 작성이었습니다.

 

아직, 테스트 코드의 개념도 없고 목적도 없지만 어떤 맛인지 체크해보기 위해 작성해봤습니다.

 

테스트 시나리오

- 포스팅 생성

- 포스팅 단건 조회

- junit5를 이용해서 진행

 

저는 @SpringBootTest를 이용해서 테스트를 진행했습니다.

간단한 특징으로는

  • 쉽게 통합 테스트를 위한 환경을 만들  수 있다.
  • 모든 빈들을 스캔하고 어플리케이션을 생성할 수 있다.
  • 다양한 옵션을 줄 수 있다.
    • value와 properties : 프로퍼티를 key=value 형태로 추가할 수 있습니다.
    • args: 애플리케이션의 arguments로 값을 전달할 수 있습니다.
    • classes : 애플리케이션을 로딩할 때 사용되는 컴포넌트 클래스들을 정의할 수 있습니다.
    • webEnvironment : 웹 테스트 환경을 설정할 수 있습니다.

이번에는 간단한 코드를 통해 어떻게 테스트를 진행했는지 보겠습니다.

@SpringBootTest를 붙여주고 필요한 연관관계를 설정합니다. 

@SpringBootTest
class PostServiceImplTest {

    @Autowired
    private PostRepository postRepository;
    @Autowired
    private PostService postService;
    @Autowired
    private UsersRepository usersRepository;

..
..
..
}

 

포스트를 생성하는 테스트입니다.

- 포스트에 대한 데이터를 주고

- 제가 만든 생성 로직을 실행시키고

- 로직의 결과가 저의 예상과 같은지 테스트해봅니다.

@Test
    @DisplayName("post 생성")
    public void 포스트생성() {

        // given
        PostCreateRequest postCreateRequest = PostCreateRequest.of("포스팅 제목", "포스팅 내용", 1L, 1L, CommunityType.ALL);
        createUserAndSubject();

        // when
        PostDTO post = postService.createPost(postCreateRequest);

        // then
        Assertions.assertEquals(post.getTitle(), postCreateRequest.getTitle());
        Assertions.assertEquals(post.getId(), 1L);
    }

 

포스트 단건 조회하는 테스트입니다.

- 포스트를 생성하고

- 조회했을 때

- 조회한 포스트가 제가 예상한 포스트와 일치하는지 체크합니다.

@Test
    @DisplayName("post 단건 조회")
    public void 포스트단건조회() {

        //given
        createPost();

        //when
        PostDTO post = postService.getPost(1L);

        //then
        Assertions.assertEquals(post.getTitle(), "포스팅 제목");
    }

공통로직입니다.

public void createUserAndSubject() {
    UserCreateRequest userCreateRequest = UserCreateRequest.of("이메일", "비밀번호", "이름", false);
    usersRepository.save(Users.of(userCreateRequest, passwordEncoder));
    subjectRepository.save(Subject.of("서비스 이름", null));
}

public void createPost() {
    PostCreateRequest postCreateRequest = PostCreateRequest.of("포스팅 제목", "포스팅 내용", 1L, 1L, CommunityType.ALL);
    createUserAndSubject();
    PostDTO post = postService.createPost(postCreateRequest);
}

 

아직, 테스트의 대한 개념과 이유 그리고 어떻게 해야 하는지 정확하게 아는 것 없이 만든 테스트입니다.

부족한 점이 많습니다. 일부러 아무것도 모르는 상태에서 진행을 해봤습니다.

지금의 테스트 개념을 공부하면서 바꿔나가는 것을 목표로

다음 포스팅은 테스트의 개념부터 시작해보려고 합니다!

728x90

댓글