Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] Application 단위 테스트와 통합 테스트의 기준을 정한다. #793

Open
seokjin8678 opened this issue Mar 18, 2024 · 1 comment
Labels
BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업 🧪 테스트 테스트에 관련된 작업

Comments

@seokjin8678
Copy link
Collaborator

✨ 세부 내용

(추후 작성 예정)

@seokjin8678 seokjin8678 added BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업 🧪 테스트 테스트에 관련된 작업 labels Mar 18, 2024
@seokjin8678
Copy link
Collaborator Author

Controller 단위 테스트

  • 다음과 같은 템플릿 형식을 사용한다.
@Nested
class 공연_생성 {

    final String uri = "/admin/api/v1/stages";

    @Nested
    @DisplayName("POST " + uri)
    class 올바른_주소로 {

        @Test
        @WithMockAuth(role = Role.ADMIN)
        void 요청을_보내면_201_응답과_Location_헤더에_식별자가_반환된다() throws Exception {
            // given
            given(stageCommandFacadeService.createStage(any(StageCreateCommand.class)))
                .willReturn(1L);

            // when & then
            mockMvc.perform(post(uri, 1)
                    .cookie(TOKEN_COOKIE)
                    .content(objectMapper.writeValueAsString(request))
                    .contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isCreated())
                .andExpect(header().string(HttpHeaders.LOCATION, "/admin/api/v1/stages/1"));
        }

        @Test
        void 토큰_없이_보내면_401_응답이_반환된다() throws Exception {
            // when & then
            mockMvc.perform(post(uri, 1))
                .andExpect(status().isUnauthorized());
        }

        @Test
        @WithMockAuth(role = Role.MEMBER)
        void 토큰의_권한이_Admin이_아니면_404_응답이_반환된다() throws Exception {
            // when & then
            mockMvc.perform(post(uri, 1)
                    .cookie(TOKEN_COOKIE))
                .andExpect(status().isNotFound());
        }
    }
}
  • 검증은 HTTP 응답의 상태 코드 및 헤더(ex: Location)를 검증한다.
    • JSON 응답은 검증하지 않는다. (jsonPath 사용 시 유지보수의 어려움, 무의미한 ObjectMapper로 역직렬화 후 검증)

Query Application 통합 테스트

  • 데이터 셋업(given)은 Repository를 의존하여 세팅한다.
  • 엔티티를 생성할 때는 반드시 픽스쳐를 사용한다.
  • 변수명은 의미 없이 작성하지 않는다.
    • school1, school2 ❌
    • 테코대학교, 우테대학교 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업 🧪 테스트 테스트에 관련된 작업
Projects
Status: Todo
Development

No branches or pull requests

1 participant